NSZone
wird in Objective-C schon lange nicht mehr verwendet. Und übergeben zone
Argument wird ignoriert. Zitat aus der Dokumentation:
Diese Methode existiert aus historischen Gründen; Speicherzonen werden nicht mehr von Objective-C verwendet.
Sie können es auch ignorieren.
Hier ist ein Beispiel für die Übereinstimmung mit NSCopying
Protokoll.
class GameModel: NSObject, NSCopying {
var someProperty: Int = 0
required override init() {
// This initializer must be required, because another
// initializer `init(_ model: GameModel)` is required
// too and we would like to instantiate `GameModel`
// with simple `GameModel()` as well.
}
required init(_ model: GameModel) {
// This initializer must be required unless `GameModel`
// class is `final`
someProperty = model.someProperty
}
func copyWithZone(zone: NSZone) -> AnyObject {
// This is the reason why `init(_ model: GameModel)`
// must be required, because `GameModel` is not `final`.
return self.dynamicType.init(self)
}
}
let model = GameModel()
model.someProperty = 10
let modelCopy = GameModel(model)
modelCopy.someProperty = 20
let anotherModelCopy = modelCopy.copy() as! GameModel
anotherModelCopy.someProperty = 30
print(model.someProperty) // 10
print(modelCopy.someProperty) // 20
print(anotherModelCopy.someProperty) // 30
P.S. Dieses Beispiel ist für Xcode Version 7.0 Beta 5 (7A176x). Vor allem die dynamicType.init(self)
.
Edit für Swift 3
Unten ist die copyWithZone Methode Implementierung für Swift 3 als dynamicType
veraltet ist:
func copy(with zone: NSZone? = nil) -> Any
{
return type(of:self).init(self)
}
Ich habe versucht, dies für meine Klasse Umsetzung, aber wie kann ich eine Kopie erstellen beim Kopieren der Variablen der Klasse? Im Moment erhalte ich eine neue Instanz, die nicht die Eigenschaften hat, die von der alten Instanz kopiert wurden. –
So kopieren Sie alle Eigenschaften einer Klasse auf einmal, anstatt die Zuweisung einzeln auszuführen. Weil Sie sehen, dass ich eine Klasse mit ungefähr 50 Eigenschaften habe, und es besteht eine hohe Wahrscheinlichkeit, dass ich die Zuweisung von einigen von ihnen vermissen könnte. Ein Ausweg? –