我试图在swift中声明一个实例属性,这样它只对它的类和子类可见.我相信这在其他语言中会被称为受保护的财产.有没有办法在Swift中实现这一点?

推荐答案

继承过程中的访问控制与Swift和Cocoa背后的设计理念并不完全相符:

在Swift中设计访问控制级别时,我们考虑了两个主要用例:

  • 对应用程序的其他部分隐藏private个类的详细信息
  • 在客户端应用程序中隐藏框架的internal个细节

这些分别对应于privateinternal个访问级别.

相比之下,protected将访问与继承混为一谈,增加了一个全新的控制轴.它实际上并没有提供任何真正的保护,因为子类总是可以通过新的公共方法或属性公开"受保护"的API.它也不提供额外的优化机会,因为新的覆盖可以来自任何地方.它的限制是不必要的——它允许子类,但不允许子类的任何助手访问某些内容.

还有进一步的解释.

Swift相关问答推荐

{Singleton类}类型的值没有成员$showegView'

计算Vision OS相机与Vision OS中3D模型之间的距离

为SwiftUI文本视图提供固定宽度,并仅在文本换行时使文本视图底部增大

修改数组中每个类实例的属性

UICollectionViewCompostionalLayout Collectionview单元格宽度在重新加载数据后未正确调整大小

在Xcode SWIFT中运行用Ionic编写的函数

我需要一些关于 SwiftUI 动画的帮助

为什么无法在 Swift 中使用AVFoundation扫描 QRCode

RealityKit - 从中心zoom 模型

自定义碰撞形状出现在错误的位置

If 语句在 Swift 中有 2 个日期

当变量首次用于其自己的初始化时,如何清除变量...在初始化之前使用错误?

我怎样才能缩短(提高效率)这段代码?

无法使用 RealityKit 播放 USDZ 动画

使用 RxSwift 围绕 async/await 方法创建 Observable

使用泛型的 Swift 枚举值

如何为 Swift UI 视图定义 struct ?

即使设置为从不也可以访问 iOS11 照片库

'#selector' 的参数不引用 '@objc' 方法、属性或初始化程序

SwiftUI - 呈现工作表后导航栏按钮不可点击