我定义了一个简单的类:
- 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:我不能让我的课最后,因为这只是一个更复杂的用例的提取。)
好的,我的坏
为了保证所有子类符合MyProtocol,新的初始化器都必须被标记为必需的。
此外,Swift要求在类中直接声明所有必需的初始值,并且不允许在扩展中声明它们。