如何在Swift中保护(如ruby)变量或函数?我知道斯威夫特只有3个等级但是有可能吗?
访问级别
Swift为您的实体提供三种不同的访问级别 码。这些访问级别是相对于其中的源文件 实体是定义的,也是相对于源文件的模块 属于。
- 公共访问允许在任何源文件中使用实体 它们的定义模块,以及另一个模块的源文件 导入定义模块。您通常在使用时使用公共访问 指定框架的公共接口。
- 内部访问 允许实体在其定义的任何源文件中使用 模块,但不在该模块之外的任何源文件中。您 通常在定义应用程序或框架时使用内部访问 内部结构。
- 私有访问限制实体的使用 它自己的定义源文件。使用私人访问来隐藏 具体功能的实现细节。
公共 访问权限是最高(限制最少)的访问级别和私有 访问权限是最低(或限制性最强)的访问级别
目前我只看到一个解决方案 - 在单个文件中编写带私有修饰符和子类的父类,但这有点痛苦。
答案 0 :(得分:5)
Swift更喜欢不使用protected
。您可以在此处阅读原因Access Control and protected
相比之下,protected将访问与继承混为一谈,添加了一个全新的控制轴来推理。它实际上并没有提供任何真正的保护,因为子类总是可以通过新的公共方法或属性公开“受保护的”API。它也没有提供额外的优化机会,因为新的覆盖可以来自任何地方。这是不必要的限制 - 它允许子类,但不允许任何子类的帮助程序访问。
答案 1 :(得分:3)
在Swift中没有与protected
等效的内容,只有子类可以访问该方法。就个人而言,我不会错过它。
在Swift中(作为Objective-C),与其他语言相比,对子类化的重视程度要低得多。如果您发现有一组希望受到保护的方法,最好将它们作为代理进行分解。
答案 2 :(得分:2)
从Ruby的角度来看,它可能很重要。然而在Swift中,它既不是无用的,也不是语言的问题。
在访问级别方面,Swift语言主要基于模块。它甚至有public private(set)
个变量,这在Objective-C中非常需要(导致样板文件)。
答案 3 :(得分:1)
Swift 3.0不是cantains protected modifier。在我们的sdk中,我们使用内部(set)修饰符,仅在sdk项目中批准set操作。
private var _authorized : Bool = false
public internal(set) var authorized : Bool
{
get
{
return _authorized;
}
set
{
_authorized = newValue
}
}