Sha*_*dav 10 protocols access-control ios swift2
我有一个在文件中定义的私有协议,如下所示
private protocol testProtocol {
 func testFunc1()
 func testFunc2()
}
公共类符合上述协议如下
 public class testClass : testProtocol {
 func testFunc1() {}
 func testFunc2() {}
}
根据apples文档,默认情况下,公共类的成员获得内部访问控制,除非它明确设置为不同的访问控制修饰符.
该文档还说,类型与具有较低访问控制的协议的一致性将使该类型的协议访问控制的实现与协议的实现相同.在这种情况下,由于类型的访问控制是公共的,并且协议访问控制是私有的,因此方法testfunc1和testfunc2应该获得私有的访问控制.
当在不同的源文件中实例化类并且如下所示访问方法时,编译器不会显示不期望的错误,因为根据指南,方法应该是私有的
var test: testClass = testClass()
test.testFunc1()
这是预期的行为吗?我错过了什么吗?
苹果文档说:
当编写或扩展类型以符合协议时,必须确保每种协议要求的类型实现至少具有与该协议所遵循的类型相同的访问级别。
据此,我假设使用testClass内部的另一个访问控制修饰符来实现方法testFunc1和testFunc2会覆盖协议中的方法。如果您使用此方法的默认协议实现,则以下编译器将返回错误:
extension testProtocol {
    func testFunc1() {}
    func testFunc2() {}
}
就Swift而言,以协议代替继承的协议是Swift的面向协议语言,如果要在自定义类中更改协议定义的函数访问级别,可能是合理的。
| 归档时间: | 
 | 
| 查看次数: | 5469 次 | 
| 最近记录: |