In my last question, I asked how to write setter for a subscript of a computed property in Swift. I think my question was not substantial enough to be understood. The answer given was either incorrect or complicated for a small task. After a long thought, I still think maybe a brighter man can offer a more inspiring answer.
To subside confusion, my question is if there is a shorthand setter declaration for a subscript of an array in Swift. Because there is shorthand setter declaration for an array in swift, but not its subscript.
A shorthand getter/setter declaration is
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)
}
}
Basically, in a scenario where a set action for action[i]
will cause actionButton[i]
to be updated. There are basically two ways to do this quickly.
First solution
func setActionAtIndex(index:Int, forValue newValue:SomeClass){
action[index] = newValue
self.updateActionButtonAtIndex(index)
}
This solution above is easy to understand, however, it requires a function, which takes two lines of code, in one class. Not quite "Swift".
Second solution
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]
}
}
}
Needless to say, this is absolutely wrong and this solution is nonexistent.
Why it is wrong?
Expected 'get', 'set', 'willSet', or 'didSet' keyword to start an accessor definition