swift – 如何满足包含初始化程序的协议?
发布时间:2020-12-14 05:50:48 所属栏目:百科 来源:网络整理
导读:我定义了一个简单的类: class MyClass { var name:String? required init() { println("init") }} 我可以在这样的扩展中添加一个新的初始化器: extension MyClass { convenience init(name: String) { self.init() self.name = name }} 一切都很好 但是一
我定义了一个简单的类:
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 } } 我收到以下错误:
这里发生了什么? (BTW:我不能让我的课最后,因为这只是一个更复杂的用例的提取。)
好的,我的坏
为了保证所有子类符合MyProtocol,新的初始化器都必须被标记为必需的。 此外,Swift要求在类中直接声明所有必需的初始值,并且不允许在扩展中声明它们。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |