这种情况类似于字典值之一的变化,其中值是值类型。即使您对字典的引用是var
参考,也不能这样做。通常情况下,您只需将该值拉出,对其进行变异并重新放回:
var d = ["key":"hell"]
var val = d["key"]!
val.append(Character("o"))
d["key"] = val
您的设置的工作原理与此类似。
var s = Set(["hell"])
var val = s.remove("hell")!
val.append(Character("o"))
s.insert(val)
还有其他的方式来表明这一点,但实际上它们是相同的东西。
这里要记住的是没有值类型,例如一个结构体,确实是可变的。我们把它说成好像是这样,Swift和它的mutating
函数也是如此,但是变异实际上包括将新值分配回参考文献。那是为什么的参考号必须是var
。因此没有这样的东西作为的任何值的类型的突变。
当然,现在使用参考类型,例如,一个类,情况完全不同:
let s = Set([NSMutableString(string:"hell")])
s.first!.appendString("o")
s // {"hello"}
什么具体类型是集携带(INT,字符串等如果自定义,指定如果结构或类)? Set是用'let'声明的? – tktsubota
@TroyT,我在'var'顶层对象(游戏场)中使用'var'属性的自定义'struct'。 – CTMacUser