Cannot use mutating member on immutable value of type

后端 未结 6 1348
被撕碎了的回忆
被撕碎了的回忆 2021-01-01 09:04

I have following struct:

public protocol SuperModel {
    // empty protocol
}
struct ModelOne: SuperModel {
    struct SubModelOne {
        var someVar: Dou         


        
6条回答
  •  无人及你
    2021-01-01 09:31

    When you apply type casting to value types (such structs), if succeed, you receive immutable copy of requested value:

    (self.data as! ModelOne) // this is copy of data
    

    The only way (as known to me) how you can mutate values that need to be casted - reassign value (as @Sahil Beri pointed you need declare variable):

    func someFunc() {
        if var data = data as? ModelOne {
            data.setSub(ModelOne.SubModelOne(someVar: 2, otherVar: 1))
            self.data = data // you can do this since ModelOne conforms to SuperModel
        }
    }
    

提交回复
热议问题