为什么我们需要明确地为结构中的函数指定mutating
?编译时是否可以从函数体中自动推断出?如果它不能,请你给我一个例子,它不能......
答案 0 :(得分:1)
当编译器无法推断可变性时,有一些特殊的例子,因为程序员决定是否应该将行为视为可变的。
例如,当结构由类备份时:
struct MyArray<T : AnyObject> {
let buffer: NSMutableArray = NSMutableArray()
func append(item: T) {
buffer.addObject(item)
}
}
let myArray = MyArray<NSString>()
myArray.append("something")
请注意,append
函数正在修改结构但它没有mutating
属性,因此您甚至可以在常量变量上使用它。如果要阻止,请添加mutating
属性。
我没有意外选择数组示例。 Swift中的字典和数组由类支持,他们必须选择哪些方法会发生变异而哪些方法不会变异。