Swift: Cannot assign to immutable expression of type 'AnyObject?!'

前端 未结 2 897
情话喂你
情话喂你 2021-02-19 02:53

I searched, but I didn\'t find a familiar answer, so...

I am about to program a class to handle parse methods like updating, adding, fetching and deleting.



        
相关标签:
2条回答
  • 2021-02-19 03:05

    In swift a lot of types are defined as structs, which are immutable by default.

    I had the same error doing this :

    protocol MyProtocol {
        var anInt: Int {get set}
    }
    
    class A {
    
    }
    
    class B: A, MyProtocol {
        var anInt: Int = 0
    }
    

    and in another class :

    class X {
    
       var myA: A
    
       ... 
       (self.myA as! MyProtocol).anInt = 1  //compile error here
       //because MyProtocol can be a struct
       //so it is inferred immutable
       //since the protocol declaration is 
       protocol MyProtocol {...
       //and not 
       protocol MyProtocol: class {...
       ...
    }
    

    so be sure to have

    protocol MyProtocol: class {
    

    when doing such casting

    0 讨论(0)
  • 2021-02-19 03:23

    The error message says, you're trying to change an immutable object, which is not possible.

    Objects declared as method parameters or return values in closures are immutable by default.

    To make the object mutable either add the keyword var in the method declaration or add a line to create a mutable object.

    Also index variables in repeat loops are immutable by default.

    In this case a line is inserted to create a mutable copy and the index variable is declared as mutable.

    Be careful to change objects while being enumerated, this could cause unexpected behavior

    ...
    query.findObjectsInBackgroundWithBlock {(objects, error) -> Void in
        if error == nil {
            //this will always have one single object
            var mutableObjects = objects
            for var user in mutableObjects! {
                //user.count would be always 1
                for (key, value) in updateData {
    
                    user[key] = value
    ...
    
    0 讨论(0)
提交回复
热议问题