加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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
    }
}

我收到以下错误:

Initializer requirement ‘init(name:)’ can only be satisfied by a
required initializer in the definition of non-final class ‘MyClass’

这里发生了什么?

(BTW:我不能让我的课最后,因为这只是一个更复杂的用例的提取。)

好的,我的坏

为了保证所有子类符合MyProtocol,新的初始化器都必须被标记为必需的。

此外,Swift要求在类中直接声明所有必需的初始值,并且不允许在扩展中声明它们。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读