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要求在类中直接声明所有必需的初始值,并且不允许在扩展中声明它们。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...