我定义了一个简单的类:
class MyClass {
var name:String?
required init() {
println("init")
}
}
我可以在这样的扩展中添加一个新的初始化程序:
extension MyClass {
convenience init(name: String) {
self.init()
self.name = name
}
}
一切正常。
但我在协议中定义新的初始值设定项时:
protocol MyProtocol {
init(name:String)
}
让我的分机确认该协议:
extension MyClass : MyProtocol {
convenience init(name: String) {
self.init()
self.name = name
}
}
我收到以下错误:
初始化程序要求&#init;(名称:)'只能满足一个 非最终类' MyClass'
定义中的required
初始值设定项
这里发生了什么?
(顺便说一句:我不能使我的班级final
,因为这只是一个更复杂的用例的摘录。)
答案 0 :(得分:22)
好的,我的坏。
为了保证所有子类符合MyProtocol
,新的初始值设定项也必须标记为required
。
此外,Swift要求在类中直接声明所有必需的初始值设定项,并且不允许在扩展中声明它们。
extension MyClass : MyProtocol {
required convenience init(name: String) {
self.init()
self.name = name
}
}