NSCopying サンプル

More than 5 years have passed since last update.

import Foundation

class Product : NSObject, NSCopying {
var _type: String

init(_ type: String) {
_type = type
}

func copyWithZone(zone: NSZone) -> AnyObject! {
var newInstance = Product(_type)
return newInstance
}
}

var foo = Product("test")
var bar = foo.copy() as Product

if (foo === bar) {
println("reference")
} else {
println("copy") // copy
}


概要


  • コピー機能を実装するクラスが NSObject NSCopying を継承していること

  • コピー機能を実装するクラスに copyWithZone メソッドを実装すること

  • コピー先の変数に代入する際、copy() メソッドを呼び、as クラス名 を最後に付与すること
    (付けなくても動作するが、Variable 'bar' inferred to have type 'AnyObject!', which may be unexpected と warning が出る)


P.S.

@NSCopying については期待する動作にならないので追って調査

ref https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/Attributes.html