【发布时间】:2026-02-11 18:25:03
【问题描述】:
在玩结构体时,我发现了以下内容:
struct SomeStruct {
private(set) var uncount: Int
subscript(i: Int) -> Int {
uncount = i // <--'self' is immutable-----
return 3
}
}
let someStructInstance = SomeStruct(uncount: 3)
someStructInstance[345]
上面的代码没有编译通过,因为'self is immutable',不能在下标加上mutating关键字。
但是,以下操作完美:
struct SomeStruct {
private(set) var uncount: Int
subscript(i: Int) -> Int {
get {
return 3
}
set {
uncount = i //<--works well now---
}
}
}
let someStructInstance = SomeStruct(uncount: 3)
someStructInstance[345]
问题:当两个下标函数都改变结构属性时,为什么一个起作用,而另一个不起作用?
【问题讨论】: