Ich versuche, die folgenden, gekünstelt, Beispiel zu verstehen:Warum muss eine Klasse keinen initialisierbaren Initializer bereitstellen, wenn sie ein Protokoll implementiert, das einen deklariert?
protocol MyProtocol {
init?(string: String)
}
class MyObject: MyProtocol {
let s: String
required init(string: String) {
self.s = string
}
}
let o = MyObject(string: "test")
print(o.s)
MyProtocol
deklariert ein failable initializer. MyObject
entspricht MyProtocol
und der Beispielcode wird kompiliert und ohne Problem ausgeführt.
Meine Frage ist: Warum nicht MyObject
haben eine failable initializer bereitzustellen (per MyProtocol
)?
Der fehlbare initialiser noch ein initialiser ist, dass ein zurückgibt. 'MyObject' im Idealfall. Es wird von dem fehlerfreien Initialisierer derselben Signatur übertrumpft. Sie müssen dem Initialisierer immer noch die gleiche Signatur für den zu kompilierenden Code bereitstellen. Ich denke, es ist ein fehlbarer Initialisierer, der nicht fehlschlagen kann. In gewisser Weise. – Fogmeister
Vielleicht weil optionale Optionen optional sind? Haha aber auf eine ernstere Note wird ein initialisiertes Objekt, das immer '.Some' ist, dein Protokoll erfüllen. – NSGangster