swift – 如何满足包含初始化程序的协议?

前端之家收集整理的这篇文章主要介绍了swift – 如何满足包含初始化程序的协议?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我定义了一个简单的类:
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要求在类中直接声明所有必需的初始值,并且不允许在扩展中声明它们。

原文链接:https://www.f2er.com/swift/320323.html

猜你在找的Swift相关文章