【发布时间】:2018-08-02 21:28:56
【问题描述】:
我有这个代码:
public protocol MyProtocol {
init()
}
public extension MyProtocol {
public init() {
self.init()
}
}
public final class MyClass: MyProtocol {}
我收到一条错误消息:
Initializer 'init()' 必须声明为 public,因为它匹配一个 公共协议“MyProtocol”中的要求
如果我在 final 之前删除访问控制 (public),它会起作用。但为什么?有什么办法可以让协议处理初始化?我认为协议的所有成员默认都是隐式public。
更奇怪的是,另一个只能在extension中找到的init默认是public:
public protocol MyProtocol {
init()
}
public extension MyProtocol {
public init() {
self.init()
}
public init(youDoNotHaveToImplementMe: Any) {
self.init()
}
}
public final class MyClass: MyProtocol {
public init() {}
}
如你所见,新的 init 实际上是public。我预计我的正常init 也应该是public。为什么不是这样?
【问题讨论】: