1. ホーム
  2. スイフト

[解決済み】プロパティのゲッターとセッター

2022-04-13 18:05:19

質問

この単純なクラスで、私はコンパイラの 警告

変更/アクセスを試みている x 自身のセッター/ゲッター内で

と、こんな風に使ってみると

var p: point = Point()
p.x = 12

EXC_BAD_ACCESSが発生します。明示的なバッキングアイバーを使用せずにこれを行うにはどうすればよいですか?

class Point {

    var x: Int {
        set {
            x = newValue * 2 //Error
        }
        get {
            return x / 2 //Error
        }
    }
    // ...
}

解決方法は?

セッターとゲッターの適用対象は computed properties このようなプロパティは、インスタンスに保存されていません - ゲッターからの値は、他のインスタンスプロパティから計算されることを意味します。 あなたの場合 x を代入する必要があります。

明示的: "明示的なバックアイバーなしでこれを行うにはどうすればよいですか"。 できません。 何か を使用して、計算されたプロパティをバックアップします。 これを試してみてください。

class Point {
  private var _x: Int = 0             // _x -> backingX
  var x: Int {
    set { _x = 2 * newValue }
    get { return _x / 2 }
  }
}

具体的には、Swift REPLで。

 15> var pt = Point()
pt: Point = {
  _x = 0
}
 16> pt.x = 10
 17> pt
$R3: Point = {
  _x = 20
}
 18> pt.x
$R4: Int = 10