我真的很困惑。
我找到了关于如何使用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")
}
}
}
有人可以解释为什么我不能分配新的密钥和值吗?
答案 0 :(得分:1)
您应该将getSettings
更改为:
mutating func getSettings(user: PFUser) {
// ...
}
在Swift中struct
是一种值类型,除非指定mutating
关键字,否则不允许对其进行更改。
结构和枚举是值类型。默认情况下,无法在其实例方法中修改值类型的属性。
但是,如果需要在特定方法中修改结构或枚举的属性,则可以选择改变该方法的行为。然后,该方法可以从方法中改变(即更改)其属性,并且当方法结束时,它所做的任何更改都将写回原始结构。该方法还可以为其隐式self属性分配一个全新的实例,并且该新实例将在方法结束时替换现有实例。
请参阅:The Swift Programming Language,“方法”一章,“从实例方法中修改值类型”一节