SwiftUI : get{}とset{}の定義
get{} , set{}の意味をわかりやすく解説してほしいです。
どのような場面で多く使われるのでしょうか。
1 likes
get{} , set{}の意味をわかりやすく解説してほしいです。
どのような場面で多く使われるのでしょうか。
Swiftの言語仕様の中で、「クラス (Class)」の「コンピューテッド・プロパティ (Computed Property)」と呼ばれるものについてお尋ねなのでしょうか。
以下、クラスについての理解は、ある程度おありになることを前提に書かせていただきます。
最もシンプルなプロパティである「ストアド・プロパティ (Stored Property)」が、単なる変数として読み(get)書き(set)されるのに対して、コンピューテッド・プロパティでは、読み書きの処理方法を独自にプログラムすることができます。
class Test {
var Value : Int = 0 // ストアド・プロパティ
}
var test = Test ()
test.Value = 12
print (test.Value)
// 12
class Test {
var Value : Int { // コンピューテッド・プロパティ
get { return value } // 値を読み出す処理
set { value = newValue } // 値を書き込む処理
}
private var value : Int = 0 // 実際の値を保持するストアド・プロパティ
}
var test = Test ()
test.Value = 12
print (test.Value)
// 12
以下のような記事が参考になるかも知れません。
【Swift】セッター(Setter)、ゲッター(Getter)の処理を書く
使い道が多くて絞ることは難しいのですが、大まかには、他のメンバーなどを間接的に操作することで、別の概念を表すような使われ方ではないかと思います。
例えば、マトリクス上の位置を保持するPosition
クラスがあるとして、そのマトリクスに対してリニアなインデックスでもアクセスしたいとしましょう。
class Position {
var Width: Int = 0 // マトリクスの横サイズ
var Height: Int = 0 // マトリクスの縦サイズ
var X: Int = 0 // X座標
var Y: Int = 0 // Y座標
var Index: Int { // 線形位置
get { // 読み出し
return Y * Width + X
}
set { // 書き込み
Y = newValue / Width
X = newValue % Width
}
}
init (width: Int, height: Int) { // 初期化
Width = width
Height = height
}
}
var pos = Position (width: 8, height: 8) // マトリクスサイズ8×8で初期化
pos.X = 5 // X座標を5に
pos.Y = 4 // Y座標を4に
print (pos.Index)
// 37 が一次元座標として表示される
pos.Index = 12 // 一次元座標を12に
print (pos.X, pos.Y)
// 4 1 が二次元座標として表示される
※実用的なコードではありません。
@LILI_groove
Questioner