public
Objective-C のインスタンス データは、protected
または になりますprivate
。例:
@interface Foo : NSObject
{
@public
int x;
@protected:
int y;
@private:
int z;
}
-(int) apple;
-(int) pear;
-(int) banana;
@end
Swift リファレンスにアクセス修飾子についての記述が見つかりませんでした。Swift でデータの可視性を制限することは可能ですか?
ベストアンサー1
Swift 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