在我的最后一个问题中,我询问了如何在 Swift 中为计算属性的下标编写 setter。我认为我的问题不够实质性,无法理解。对于一项小任务,给出的答案要么不正确,要么复杂。经过长时间的思考,我仍然认为也许一个更聪明的人可以提供一个更鼓舞人心的答案。
为了消除混乱,我的问题是Swift 中的数组下标是否有速记 setter 声明。因为 swift 中有一个数组的简写 setter 声明,但没有它的下标。
速记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)
}
}
基本上,在一个 set 操作 foraction[i]
将导致actionButton[i]
更新的情况下。基本上有两种方法可以快速做到这一点。
第一个解决方案
func setActionAtIndex(index:Int, forValue newValue:SomeClass){
action[index] = newValue
self.updateActionButtonAtIndex(index)
}
上面的这个解决方案很容易理解,但是它需要一个函数,在一个类中需要两行代码。不完全是“斯威夫特”。
第二种解决方案
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