2015-07-14 4 views
0

Я действительно смущен этим.не может назначить результат этого выражения - словарь

Я нашел примеры того, как использовать словарь, но ни один из них не объясняет эту ошибку.

Вот мой код.

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

Вы должны изменить getSettings на:

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

В Swift struct является типом значения, и методы на него не могут изменить его, если не указано mutating ключевое слово.

Структуры и перечисления являются типами значений. По умолчанию свойства типа значения не могут быть изменены из его методов экземпляра.

Однако, если вам нужно изменить свойства вашей структуры или перечисления в определенном методе, вы можете выбрать способ изменения для этого метода. Затем этот метод может мутировать (то есть изменять) его свойства внутри метода, и любые изменения, которые он делает, записываются обратно в исходную структуру, когда метод заканчивается. Этот метод также может присваивать полностью новый экземпляр его неявному свойству self, и этот новый экземпляр заменит существующий, когда метод закончится.

См: The Swift Programming Language, глава "Методы", в разделе "Изменение типов значений из В Методы Instance"

Смежные вопросы