可以变异'推断结构内部的功能?

时间:2014-07-07 09:16:31

标签: swift

为什么我们需要明确地为结构中的函数指定mutating?编译时是否可以从函数体中自动推断出?如果它不能,请你给我一个例子,它不能......

1 个答案:

答案 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中的字典和数组由类支持,他们必须选择哪些方法会发生变异而哪些方法不会变异。