サーチ…


構文

  • プライベートクラスプロジェクト
  • let car = Car( "Ford"、モデル: "Escape")//デフォルトの内部
  • public enumジャンル
  • プライベート関数calculateMarketCap()
  • 内部機能を無効にするsetupView()
  • プライベート(セット)var area = 0

備考

  1. 基本備考:

以下は、最高アクセス(最小制限)から最小アクセス(最大制限)までの3つのアクセスレベルです。

パブリックアクセスでは、モデル内の任意のファイルからクラス、構造体、変数などにアクセスできますが、外部ファイルがパブリックアクセスコードを含むモジュールをインポートする場合は、モジュールの外で重要です。フレームワークの作成時にパブリックアクセスを使用するのが一般的です。

内部アクセスでは、エンティティのモジュールでのみエンティティを使用できます。すべてのエンティティは、デフォルトで内部アクセスレベルを持ちます(ただし例外はありません)。

プライベートアクセスは、エンティティがそのファイルの外で使用されるのを防ぎます。

  1. サブクラス化備考:

サブクラスはそのスーパークラスよりも高いアクセス権を持つことはできません。

  1. ゲッターとセッター備考:

プロパティのセッターがprivateの場合、getterは内部(デフォルト)です。ゲッターとセッターの両方にアクセスレベルを割り当てることもできます。これらの原則は下付き文字にも適用されます

  1. 一般備考:

その他のエンティティタイプには、初期化子、プロトコル、拡張子、ジェネリックス、およびタイプエイリアスがあります。

構造体を使用した基本的な例

3.0

Swift 3では、複数のアクセスレベルがあります。この例では、 open以外のすべてを使用していopen

public struct Car {
    
    public let make: String
    let model: String //Optional keyword: will automatically be "internal"
    private let fullName: String
    fileprivate var otherName: String
    
    public init(_ make: String, model: String) {
        self.make = make
        self.model = model
        self.fullName = "\(make)\(model)"
        self.otherName = "\(model) - \(make)"
    }
}

myCarが次のように初期化されたとします。

let myCar = Car("Apple", model: "iCar")

Car.make(パブリック)

print(myCar.make)

このプリントは、 Carをインポートするターゲットを含め、どこでも動作します。

Car.model(内部)

print(myCar.model)

これは、コードがCarと同じターゲットにある場合にコンパイルされます。

Car.otherName(fileprivate)

print(myCar.otherName)

これは、コードがCar と同じファイルにある場合にのみ機能します

Car.fullName(プライベート)

print(myCar.fullName)

これはSwift 3では機能しません。 privateプロパティは同じstruct / class内でのみアクセスできます。

public struct Car {

    public let make: String       //public
    let model: String             //internal
    private let fullName: String! //private 

    public init(_ make: String, model model: String) {
        self.make = make
        self.model = model
        self.fullName = "\(make)\(model)"
    }
}

エンティティに複数の関連アクセスレベルがある場合、Swiftは最低レベルのアクセスを探します。プライベート変数がパブリッククラスに存在する場合、その変数は引き続きプライベートクラスとみなされます。

サブクラス化の例

public class SuperClass {
    private func secretMethod() {}
}
 
internal class SubClass: SuperClass {
    override internal func secretMethod() {
        super.secretMethod()
    }
}

ゲッターとセッターの例

struct Square {
    private(set) var area = 0

    var side: Int = 0 {
        didSet {
            area = side*side
        }
    }
}

public struct Square {
    public private(set) var area = 0
    public var side: Int = 0 {
        didSet {
            area = side*side
        }
    }
    public init() {}
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow