在公共协议中声明并在从该公共协议继承的内部协议的扩展中实现为公共的属性,有效的访问级别是什么?
我在框架中有以下简化声明:
public protocol PublicProtocol: AnyObject {
var visible: Int { get }
func test()
}
protocol InternalProtocol: PublicProtocol {
var invisible: Int { get }
}
extension InternalProtocol {
public var visible: Int { return 4 }
var invisible: Int { return 8 }
public func test() {
print("visible: \(self.visible), invisible: \(self.invisible)")
}
}
public class Object: InternalProtocol {
public init () {}
}
将该框架导入主模块后,以下代码将编译并运行良好:
let o = Object()
o.test() // prints "visible: 4, invisible: 8"
Xcode的编译和语法高亮显示按预期工作,但是根本没有代码完成:
这是特定于Xcode的错误,还是我做错了什么?如果是错误,那么是什么原因造成的:它是Swift,允许公共类采用从公共协议继承的内部协议,或者只是Xcode的代码自动完成功能在尝试计算Object
的公共接口时卡住了?
Xcode 10.1(10B61)。