假设我们有以下示例代码:
protocol MyProtocol {
func someFunction()
}
public class MyClass {
}
public extension MyClass: MyProtocol {
func someFunction() {
print("hello")
}
}
Run Code Online (Sandbox Code Playgroud)
编译上面的代码会出现以下错误:
错误:'public'修饰符不能与声明协议一致性的扩展一起使用
如果我将扩展名标记为,则会出现同样的情况private.它好像不能设置符合协议的扩展的访问级别,无论使用什么访问级别设置为中.甚至将协议声明设置为public或private不删除错误.
如果Swift符合协议,Swift以这种方式限制扩展访问级别的原因是什么?如果在类级别应用协议一致性,则不存在此类限制.
如果我服从编译器并删除private/ public指定,那么访问级别是someFunction()多少?
extension MyClass: MyProtocol {
func someFunction() {
print("hello")
}
}
Run Code Online (Sandbox Code Playgroud)
我想在这种情况下,它将遵循原始的MyClass实现,public但我不确定.
这种行为是否存在,因为扩展中的协议一致性意味着整个类符合协议,因此在扩展中重新指定访问级别是多余的?