Professordeng's Blog

swift 中 structenum 均可以包含类方法和实例方法,swift 官方是不建议在 structenum 的普通方法里修改属性变量,但是在 func 前面添加 mutating 关键字之后就可以方法内修改。

对于 protocol 方法也是适用的,mutating 可以修饰的代理方法,如果 structenum 实现协议之后可以在对应的 mutating 代理方法内修改本身的属性变量。(class 不影响,因为属性变量对于类的类方法,实例方法是透明的,即随时都可以改变)

mutating func funcName()
extension String {
    mutating func appendString(aString: String) {
        self.append("test: \(aString)")
    }
}
protocol MyProtocol {
    mutating func testMutatingKeyValue(index: Int)
}

struct MyStruct: MyProtocol {
    var index = 0
    mutating func testMutatingKeyValue(index: Int) {
        self.index = index
    }
}