提问者:小点点

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


如果有类被定义为结构体,则此示例Swift代码不会编译。编译器说:@value$T6与(String, Proto)不相同

但是,编译器不会抱怨有类

为什么?


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个答案

匿名用户

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

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

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

}

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

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