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