一尘不染

Swift是否具有访问修饰符?

swift

在Objective-C实例数据可以是publicprotectedprivate。例如:

@interface Foo : NSObject
{
  @public
    int x;
  @protected:
    int y;
  @private:
    int z;
  }
-(int) apple;
-(int) pear;
-(int) banana;
@end

在Swift参考中,我还没有提到访问修饰符。是否有可能限制Swift中数据的可见性?


阅读 218

收藏
2020-07-07

共1个答案

一尘不染

Swift 3.0.1开始 ,共有
4级访问权限

,从最高(最低限制)到最低(最高限制)进行描述。


1. openpublic

允许在定义模块(目标)之外使用实体。指定框架的公共接口时,通常使用openpublic访问。

但是, open 访问权限仅适用于类和类成员,它与public访问不同之处如下:

  • public 类和类成员只能在定义模块(目标)内进行子类化和重写。
  • open 可以在定义模块(目标)之内和之外对类和类成员进行子类化和重写。

    // First.framework – A.swift

    open class A {}

    // First.framework – B.swift

    public class B: A {} // ok

    // Second.framework – C.swift

    import First

    internal class C: A {} // ok

    // Second.framework – D.swift

    import First

    internal class D: B {} // error: B cannot be subclassed

2。 internal

使实体可以在定义模块(目标)中使用。internal在定义应用程序或框架的内部结构时,通常使用访问权限。

// First.framework – A.swift

internal struct A {}



// First.framework – B.swift

A() // ok



// Second.framework – C.swift

import First

A() // error: A is unavailable

3。 fileprivate

将实体的使用限制在其定义的源文件中。fileprivate当在整个文件中使用特定功能的实现细节时,通常使用访问权限来隐藏这些细节。

// First.framework – A.swift

internal struct A {

    fileprivate static let x: Int

}

A.x // ok



// First.framework – B.swift

A.x // error: x is not available

4。 private

将实体的使用限制在其随附的声明中。private当仅在单个声明中使用特定功能的实现细节时,通常使用访问权限来隐藏这些细节。

// First.framework – A.swift

internal struct A {

    private static let x: Int

    internal static func doSomethingWithX() {
        x // ok
    }

}

A.x // error: x is unavailable
2020-07-07