我定义了一个简单的类:
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 } }
我收到以下错误:
Initializer requirement ‘init(name:)’ can only be satisfied by a
required
initializer in the definition of non-final class ‘MyClass’
这里发生了什么?
(BTW:我不能让我的课最后,因为这只是一个更复杂的用例的提取。)
好的,我的坏
原文链接:https://www.f2er.com/swift/320323.html为了保证所有子类符合MyProtocol,新的初始化器都必须被标记为必需的。
此外,Swift要求在类中直接声明所有必需的初始值,并且不允许在扩展中声明它们。