以下のようスウィフト3.0.1、あるアクセスの4つのレベル最小(最も制限的)に最も高い(最も制限)から説明します。
1. open
およびpublic
エンティティを定義モジュール(ターゲット)の外部で使用できるようにします。通常は、フレームワークへのパブリックインターフェイスを指定するときに使用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