Swift Language
アクセス制御
サーチ…
構文
- プライベートクラスプロジェクト
- let car = Car( "Ford"、モデル: "Escape")//デフォルトの内部
- public enumジャンル
- プライベート関数calculateMarketCap()
- 内部機能を無効にするsetupView()
- プライベート(セット)var area = 0
備考
- 基本備考:
以下は、最高アクセス(最小制限)から最小アクセス(最大制限)までの3つのアクセスレベルです。
パブリックアクセスでは、モデル内の任意のファイルからクラス、構造体、変数などにアクセスできますが、外部ファイルがパブリックアクセスコードを含むモジュールをインポートする場合は、モジュールの外で重要です。フレームワークの作成時にパブリックアクセスを使用するのが一般的です。
内部アクセスでは、エンティティのモジュールでのみエンティティを使用できます。すべてのエンティティは、デフォルトで内部アクセスレベルを持ちます(ただし例外はありません)。
プライベートアクセスは、エンティティがそのファイルの外で使用されるのを防ぎます。
- サブクラス化備考:
サブクラスはそのスーパークラスよりも高いアクセス権を持つことはできません。
- ゲッターとセッター備考:
プロパティのセッターがprivateの場合、getterは内部(デフォルト)です。ゲッターとセッターの両方にアクセスレベルを割り当てることもできます。これらの原則は下付き文字にも適用されます
- 一般備考:
その他のエンティティタイプには、初期化子、プロトコル、拡張子、ジェネリックス、およびタイプエイリアスがあります。
構造体を使用した基本的な例
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() {}
}