最後の質問で、Swift で計算されたプロパティの添え字のセッターを記述する方法を尋ねました。私の質問は理解できるほど十分ではなかったと思います。与えられた答えは、小さなタスクに対して不正確であるか、複雑でした。長い間考えた後、私はまだ頭の良い人がもっと感動的な答えを提供できるのではないかと思います.
混乱を和らげるために、私の質問は、 Swift の配列の添字に対する簡略化された setter 宣言があるかどうかです。Swift には配列の簡略化されたセッター宣言がありますが、添字はありません。
省略形の getter/setter 宣言は次のとおりです。
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
基本的に、設定されたアクションが更新されるシナリオaction[i]
でactionButton[i]
。これをすばやく行うには、基本的に 2 つの方法があります。
最初の解決策
func setActionAtIndex(index:Int, forValue newValue:SomeClass){
action[index] = newValue
self.updateActionButtonAtIndex(index)
}
上記のソリューションは簡単に理解できますが、1 つのクラスに 2 行のコードを必要とする関数が必要です。「スイフト」ではありません。
2 番目の解決策
var action: [SomeClass] {
subscript(index:Int){
set(index:Int,newValue:SomeClass){
action[index] = newValue
//extra action to be performed
updateActionButtonAtIndex(index)
}
get{
return action[index]
}
}
}
言うまでもなく、これは絶対に間違っており、この解決策は存在しません。
なぜ間違っているのですか?
Expected 'get', 'set', 'willSet', or 'didSet' keyword to start an accessor definition