swift - 如何为枚举关联值实现 swift 下标 setter

标签 swift enums subscript-operator

尝试让以下内容发挥作用:

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/

相关文章:

c++ - 编写下标非成员函数

c++ - C++ 中的 int[pointer-to-array] 是标准的吗?

swift - 我收到错误消息 "expected ' )' in expression list"连接到@IBAction func createaccountButton

ios - UICollectioviewCell 中的 Uiview 的左下角和右下角半径问题

swift - 从 NSDictionaries 获取值到单独变量的正确方法是什么

Java Enum 数据长值被设置为零

Swift Bridge 和 Closure Band SDK

for-loop - 简化迭代循环(使用 crate )

c# - 将枚举与列表进行比较<int>

c# - 如何从 C++ 下标运算符所在的类中访问它?