Swift中受保护的访问级别

时间:2015-09-16 08:17:52

标签: swift

如何在Swift中保护(如ruby)变量或函数?我知道斯威夫特只有3个等级但是有可能吗?

访问级别

  

Swift为您的实体提供三种不同的访问级别   码。这些访问级别是相对于其中的源文件   实体是定义的,也是相对于源文件的模块   属于。

     
      
  • 公共访问允许在任何源文件中使用实体   它们的定义模块,以及另一个模块的源文件   导入定义模块。您通常在使用时使用公共访问   指定框架的公共接口。
  •   
  • 内部访问   允许实体在其定义的任何源文件中使用   模块,但不在该模块之外的任何源文件中。您   通常在定义应用程序或框架时使用内部访问   内部结构。
  •   
  • 私有访问限制实体的使用   它自己的定义源文件。使用私人访问来隐藏   具体功能的实现细节。
  •   
     

公共   访问权限是最高(限制最少)的访问级别和私有   访问权限是最低(或限制性最强)的访问级别

目前我只看到一个解决方案 - 在单个文件中编写带私有修饰符和子类的父类,但这有点痛苦。

4 个答案:

答案 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
    }
}