尝试使以下各项起作用:
enum Foobar {
case values([Int])
case singleThing(Double)
subscript(index:Int) -> Int? {
get {
switch self {
case .values (let numbers):
return numbers[index]
default:
return nil
}
}
set {
switch self {
case .values (let numbers):
numbers[index] = newValue!
default:
break
}
}
}
}
上面的代码无法编译。它抱怨说,给numbers
我分配时,我正在更新let
。所以,我想更换该let
有var
。哪个编译。但是什么也不做,因为它会更新关联数组的值副本,而不是原始数组本身。至少那是我认为的情况。
有没有一种方法可以让我拥有可订阅的关联值并set
在适当的时候实现该属性?
在
case .values (let numbers):
numbers[index] = newValue!
numbers
是绑定到当前关联值的局部变量。即使使用var numbers
,您也只能修改此变量,而不能修改枚举实例。
case .values (var numbers):
numbers[index] = newValue!
self = .values(numbers)
应该做你期望的。(但是请注意,使用下标setternil
会导致程序崩溃。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句