小编Pao*_*olo的帖子

为什么具有协议一致性的扩展不能具有特定的访问级别?

假设我们有以下示例代码:

protocol MyProtocol {
    func someFunction()
}

public class MyClass {

}

public extension MyClass: MyProtocol {
    func someFunction() {
        print("hello")
    }
}
Run Code Online (Sandbox Code Playgroud)

编译上面的代码会出现以下错误:

错误:'public'修饰符不能与声明协议一致性的扩展一起使用

如果我将扩展名标记为,则会出现同样的情况private.它好像不能设置符合协议的扩展的访问级别,无论使用什么访问级别设置为中.甚至将协议声明设置为publicprivate不删除错误.

如果Swift符合协议,Swift以这种方式限制扩展访问级别的原因是什么?如果在类级别应用协议一致性,则不存在此类限制.

如果我服从编译器并删除private/ public指定,那么访问级别是someFunction()多少?

extension MyClass: MyProtocol {
    func someFunction() {
        print("hello")
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在这种情况下,它将遵循原始的MyClass实现,public但我不确定.

这种行为是否存在,因为扩展中的协议一致性意味着整个类符合协议,因此在扩展中重新指定访问级别是多余的?

protocols access-levels swift swift-extensions

15
推荐指数
2
解决办法
4422
查看次数