我定义了一个简单的类:
class MyClass {
var name:String?
required init() {
println("init")
}
}
我可以像这样在扩展中添加一个新的初始化器:
extension MyClass {
convenience init(name: String) {
self.init()
self.name = name
}
}
一切正常。
但是一旦我在协议(protocol)中定义了新的初始值设定项:
protocol MyProtocol {
init(name:String)
}
并使我的扩展符合该协议(protocol):
extension MyClass : MyProtocol {
convenience init(name: String) {
self.init()
self.name = name
}
}
我收到以下错误:
Initializer requirement 'init(name:)' can only be satisfied by a
required
initializer in the definition of non-final class 'MyClass'
这是怎么回事?
(顺便说一句:我不能让我的类final
,因为这只是一个更复杂的用例的摘录。)
最佳答案
好吧,我的错。
为了保证所有子类都符合MyProtocol
,新的初始化器也必须被标记为required
。
此外,Swift 要求直接在类中声明所有必需的初始化器,不允许在扩展中声明它们。
extension MyClass : MyProtocol {
required convenience init(name: String) {
self.init()
self.name = name
}
}
关于swift - 如何满足包含初始值设定项的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578664/