必须指定Swift协议中的初始化程序.为什么会这样?

cfi*_*her 7 compiler-errors protocols initialization swift

如果您尝试protocol在包含a的Swift中创建一个convenience initialiser,您将立即被编译器骂:

protocol Zizo{
    convenience init(a:String, b:Int)
}
Run Code Online (Sandbox Code Playgroud)

非类型中不允许使用便捷初始值设定项.

这种限制有什么理由吗?这对我来说没有意义.

什么可能出错?

rin*_*aro 10

这是因为,没有任何意义.protocol只定义实现者具有所需的方法和属性.它没有定义实现细节.如果protocol需要init(a:String, b:Int),你可以实现它即被指定的便利初始化,只要你喜欢.

protocol Zizo{
    init(a:String, b:Int)
}

class Foo:Zizo {
    init() {
    }
    convenience required init(a:String, b:Int) {
        self.init()
    }
}
class Bar:Foo {
    override convenience init() {
        self.init(a:"baz", b:42)
    }
    required init(a:String, b:Int) {
        super.init()
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,protocol强制init(a:String, b:Int)required初始化器,但对"方便"或"指定"没有任何作用.