 <p>The <code>copy</code> method is defined in <code>NSObject</code>. If you custom class does not inherit from <code>NSObject</code>, <code>copy</code> won't be available.</p> <p>You can define <code>copy</code> for any object in the following way:</p> <pre><code>class MyRootClass { //create a copy if the object implements NSCopying, crash otherwise func copy() -&gt; AnyObject! { if let asCopying = ((self as AnyObject) as? NSCopying) { return asCopying.copyWithZone(nil) } else { assert(false, "This class doesn't implement NSCopying") return nil } } } class A : MyRootClass { } class B : MyRootClass, NSCopying { func copyWithZone(zone: NSZone) -&gt; AnyObject! { return B() } } var b = B() var a = A() b.copy() //will create a copy a.copy() //will fail </code></pre> <p>I guess that <code>copy</code> isn't really a pure Swift way of copying objects. In Swift it is probably a more common way to create a copy constructor (an initializer that takes an object of the same type).</p>