Self
kann auch in Klassen verwendet werden und ist nützlich. Hier ist ein Artikel darüber.
Hier ist ein Beispiel. Sie haben eine Klasse namens MyClass
. MyClass
Methoden haben, die Instanzen davon zurückgeben. Jetzt fügen Sie eine Unterklasse von MyClass
aufgerufen hinzu MySubclass
. Sie möchten, dass diese Methoden Instanzen von MySubclass
statt zurückgeben MyClass
. Der folgende Code zeigt, wie es geht. Beachten Sie, dass die Methoden entweder Instanzmethoden oder Klassenmethoden sein können.
class MyClass: CustomStringConvertible {
let text: String
required init(text: String) {
self.text = text
}
class func create() -> Self {
return self.init(text: "Created")
}
func modify() -> Self {
return type(of: self).init(text: "modifid: " + text)
}
var description: String {
return text
}
}
class MySubclass: MyClass {
required init(text: String) {
super.init(text: "MySubclass " + text)
}
}
let myClass = MyClass.create()
let myClassModified = myClass.modify()
let mySubclass = MySubclass.create()
let mySubclassModified = mySubclass.modify()
print(myClass)
print(myClassModified)
print(mySubclass)
print(mySubclassModified)
Die folgende Zeile wurde ausgedruckt:
self
undSelf
in Protokollerweiterungen - darauf gehe ich in diesen Fragen und Antworten ausführlich ein .