小编典典

Swift 有访问修饰符吗?

all

在 Objective-C 实例中,数据可以是public,protectedprivate. 例如:

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

我没有在 Swift 参考中找到任何关于访问修饰符的内容。是否可以限制 Swift 中数据的可见性?


阅读 90

收藏
2022-04-29

共1个答案

小编典典

Swift 3.0.1 开始,有 4
个访问级别

,如下所述,从最高(限制最少)到最低(限制最多)。


1.openpublic

使实体能够在定义模块(目标)之外使用。您通常在指定框架的公共接口时使用open或访问。public

但是, 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
2022-04-29