Я только что прочитал документ Apple Swift 4, касающийся требований инициализатора протокола, и предоставлял реализацию по умолчанию в расширении протокола.
import UIKit
protocol Protocol {
init()
}
extension Protocol {
init() {
print("SDf")
self.init() // Line 1
// Compiler error occured if this is omitted
//"'self.init' isn't called on all paths before returning from initializer"
}
}
struct Structure: Protocol {
init(string: String) {
}
}
Structure() // Line 2
Теперь, как вы можете видеть, выполнение перейдет в цикл, так как по умолчанию структура не имеет реализации для init()
, поэтому протокол при условии, что init будет вызван, и он снова вызовет себя, и так оно входит в бесконечный цикл.
Теперь, зная это, если я удалю строку 1, компилятор выдаст ошибку.
Q. Почему это заставляет меня использовать self.init()
в строке 1, и как я могу выйти из этой ситуации?