尝试让以下内容发挥作用:
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
}
}
}
}
上面的代码无法编译。它提示当我用 let
分配它时,我正在更新 numbers
。所以我尝试用 var
替换 let
。哪个编译。但什么也不做,因为它更新关联数组的值副本,而不是原始数组本身。至少我认为是这样。
有没有一种方法可以让我拥有可下标的关联值并在适当的时候实现 set
属性?
最佳答案
在
case .values (let numbers):
numbers[index] = newValue!
numbers
是一个局部变量,它绑定(bind)到当前关联的
值(value)。即使使用 var number
,您也只能修改此变量,而不是
枚举的实例。
case .values (var numbers):
numbers[index] = newValue!
self = .values(numbers)
应该做你期望的事情。 (但请注意,调用下标
带有 nil
的 setter 会使你的程序崩溃。)
关于swift - 如何为枚举关联值实现 swift 下标 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34163383/