Próbuję zrozumieć, co następuje, wymyślony, przykład:Dlaczego klasa nie musi dostarczyć awaryjnego inicjalizatora, jeśli implementuje protokół, który ją deklaruje?
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
deklaruje failable initializer. MyObject
jest zgodny z MyProtocol
, a przykładowy kod kompiluje się i wykonuje bez problemu.
Moje pytanie brzmi: Dlaczego nie MyObject
mieć dostarczenie failable inicjator (zgodnie MyProtocol
)?
omylny initialiser jest nadal initialiser że zwraca. 'MyObject' w idealnym przypadku. Jest podszyta przez nieweryfikowalny inicjator tego samego podpisu. Nadal musisz dostarczyć inicjatorowi tę samą sygnaturę dla kodu do kompilacji. Sądzę, że jest to omylny inicjator, który nie może zawieść. W pewien sposób. – Fogmeister
Być może dlatego, że opcje są opcjonalne? Haha, ale na bardziej poważny zanotować intialized obiekt, który jest zawsze '.Some' będzie spełniać twój protokół. – NSGangster