假设我们有以下示例代码:
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
,但我不确定。
这个行为是否存在是因为扩展中的协议一致性意味着整个类符合协议,因此在扩展中重新指定访问级别是多余的吗?