无法分配到此表达式的结果 - 字典

时间:2015-07-14 10:05:11

标签: ios swift dictionary

我真的很困惑。

我找到了关于如何使用Dictionary但没有解释此错误的示例。

这是我的代码。

struct GDuserSettings{
    var GDUserSettings = Dictionary<String, Bool>()
    func getSettings(user: PFUser){
        var settingsquery = PFQuery(className: "ProfileSettings")
        settingsquery.whereKey("user", equalTo: user)
        settingsquery.getFirstObjectInBackgroundWithBlock{(object: PFObject?, error:NSError?) -> Void in
            self.GDUserSettings["location"] = false
            //self.userDefaults["pushNotifications"] = object?.objectForKey("pushNotifications")
            //self.userDefaults["distanceInMiles"] = object?.objectForKey("distanceInMiles")
        }
    }
}

有人可以解释为什么我不能分配新的密钥和值吗?

1 个答案:

答案 0 :(得分:1)

您应该将getSettings更改为:

mutating func getSettings(user: PFUser) {
    // ...
}

在Swift中struct是一种值类型,除非指定mutating关键字,否则不允许对其进行更改。

  

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

     

但是,如果需要在特定方法中修改结构或枚举的属性,则可以选择改变该方法的行为。然后,该方法可以从方法中改变(即更改)其属性,并且当方法结束时,它所做的任何更改都将写回原始结构。该方法还可以为其隐式self属性分配一个全新的实例,并且该新实例将在方法结束时替换现有实例。

请参阅:The Swift Programming Language,“方法”一章,“从实例方法中修改值类型”一节