Swift - 在地图中存储值。结构与类中的不同行为

时间:2015-01-26 10:52:25

标签: swift

如果将SomeClass定义为struct,则此示例Swift代码无法编译。编译器说:@value $T6 is not identical to (String, Proto)

但是,如果SomeClass是一个类,编译器不会抱怨。

为什么呢?


public protocol Proto {
    func hello(value:Int)
}


public struct SomeClass {

    var map = [String:Proto]()

    public func store (key:String, value:Proto) {

        map[key] = value // That does not work if SomeClass is a struct  

    }
}


1 个答案:

答案 0 :(得分:2)

因为你在store函数中修改了struct的元素,如果你这样做了,你必须添加" mutating"它的前缀。 所以:

public mutating func store (key:String, value:Proto) {

    map[key] = value // That does not work if SomeClass is a struct

}
  

结构和枚举是值类型。默认情况下,无法在其实例方法中修改值类型的属性。

     

但是,如果需要在特定方法中修改结构或枚举的属性,则可以选择改变该方法的行为。