迭代器对于类是可变的:
var selections: [Selection] = []
class Selection {
var selected: Bool
init(selected: Bool) {
self.selected = selected
}
}
selections.forEach({ $0.selected = false }) // This works
但结构不可变:
var selections: [Selection] = []
struct Selection {
var selected: Bool
}
selections.forEach({ $0.selected = false }) // This doesn't work because $0 is immutable
答案 0 :(得分:2)
事实并非如此,结构是不可改变的。但是你改变了结构的不同实例。
Swift模糊了对象和结构的处理方式。
对象是引用类型,结构是值类型。这意味着,迭代对象会将对象的引用作为参数传递,并更改引用所指向的对象,从而更改原始对象。
结构是价值类型。结构的新实例作为参数传递。而且在这种情况下它是恒定的。但即使你可以改变它,这也不会影响结构的原始实例。
在其他编程语言中,这种不同的间接层是可见的,即。即在Objective-C中*
。在Swift中它不是。