nwa*_*les 36 access-control swift
我试图在swift中声明一个实例属性,以便它只对它的类和子类可见.我相信这会被称为其他语言的受保护财产.有没有办法在Swift中实现这一目标?
ric*_*ter 42
继承行的访问控制并不真正适合Swift和Cocoa背后的设计理念:
在Swift中设计访问控制级别时,我们考虑了两个主要用例:
- 保持
private类的详细信息隐藏在应用程序的其余部分- 保持
internal隐藏在客户端应用程序中的框架的详细信息这些对应于
private和internal访问级别,分别.与此相反,
protected合并了具有继承访问,增加了一个全新的控制轴以推理.它实际上并没有提供任何真正的保护,因为子类总是可以通过新的公共方法或属性公开"受保护的"API.它也没有提供额外的优化机会,因为新的覆盖可以来自任何地方.这是不必要的限制 - 它允许子类,但不允许任何子类的助手访问某些东西.
Apple的Swift博客上有进一步的解释.
fun*_*ct7 10
一种方法是使用fileprivate关键字定义函数或属性,并在同一文件中定义子类,如下所示:
class Parent {
fileprivate var someProperty: Any?
}
class Child: Parent {
func someFunction() {
print(someProperty)
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这非常令人讨厌,因为该文件将是一团糟。更不用说为什么Swift允许这样做了,但不protected只是...啊。
| 归档时间: |
|
| 查看次数: |
16643 次 |
| 最近记录: |