access-modifiers - Swift 有访问修饰符吗?

标签 access-modifiers 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 中限制数据的可见性?

最佳答案

As of Swift 3.0.1, there are 4 levels of access , 下面从最高(限制最少)到最低(限制最多)进行描述。


1。 openpublic

使实体能够在定义模块(目标)之外使用。在指定框架的公共(public)接口(interface)时,您通常使用 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 访问。

// 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。 文件私有(private)

将实体的使用限制在其定义的源文件中。当在整个文件中使用这些细节时,您通常使用 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

关于access-modifiers - Swift 有访问修饰符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005826/

相关文章:

java - 方法覆盖访问修饰符和返回类型限制

c# - 访问修饰符是 C# 中方法签名的一部分吗?

c++ - 为什么只有在声明自定义构造函数时才能访问基类析构函数?

ios - 如何防止访问其他类的委托(delegate)方法?

Swift:NSMutableSet -> 类型 'CGPoint' 不符合协议(protocol) 'AnyObject'

java - 访问修饰符

ios - 为什么 SceneKit CPU 使用率这么高?

swift - 如何使用数组存储每轮的分数

ios - map 返回错误,而长格式 swift 成功

swift - TabBar 后面的 TableView 内容