Swift にはアクセス修飾子がありますか? 質問する

Swift にはアクセス修飾子がありますか? 質問する

publicObjective-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

おすすめ記事