0
1

【Swift】private(set) と fileprivate(set)

Posted at

private(set) について簡単にまとめました。

private(set)

private(set) は値が初期化中にのみ設定することができ、いつでも読み取ることができる「読み取り専用のプロパティ」を作成することができます。

class MyClass {
    private (set) var myProperty: String
    
    init(myProperty: String) {
        self.myProperty = myProperty
    }
}

let myInstance = MyClass(myProperty: "Hello World") // 初期化なのでOK
print(myInstance.myProperty) // 出力:Hello World
myInstance.myProperty = "Goodbey World" // Error すでに初期化されているのでOUT

この例にある MyClass の myProperty は、初期化時のみ値を設定することができる読み取り専用のプロパティです。
実際に、初期化時に"Hello World という値を設定します。
「初期化中にのみ設定できる」なので問題なく出力できます。
しかし、"Goodbey World を代入するとエラーになります。すでに初期化して、読み取り専用プロパティとなっているのでOUTです。

fileprivate(set)

private(set) に似たものとして、fileprivate(set) というものがあります。
これは、現在のファイル内で変更できます。
以下は、Swift で fileprivate(set) を使用する方法の例です。

class MyFileClass {
    fileprivate(set) var myProperty: String
    
    init(myProperty: String) {
        self.myProperty = myProperty
    }
}

extension MyFileClass {
    func changeMyProperty() {
        myProperty = "Goodbye World"
    }
}

let myFileInstance = MyFileClass(myProperty: "Hello World")
print(myFileInstance.myProperty) // 出力:Hello World
myFileInstance.changeMyProperty()
print(myFileInstance.myProperty) // 出力:"Goodbye World"

参考文献

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1