NSUserDefaults и использование метода setobject для хранения ошибки CLLocationCoordinate2D в Swift

Я нашел ответ на этот вопрос здесь: Храните CLLocationCoordinate2D в NSUserDefaults. И код написан на Objective C. Я понимаю, по большей части, что происходит с кодом в этой ссылке. Однако мне трудно перевести синтаксис на Swift. И я думаю, что другим было бы полезно иметь этот перевод.

Просто чтобы повторить ошибку, это: Cannot invoke 'setObject' with an argument list of type (CLLocationCoordinate2D, forKey: String!), И вот синтаксис, который вызывает эту проблему:

let mapAnnotations = NSUserDefaults.standardUserDefaults()
let newCoordinate = self.mapView.convertPoint(touchPoint, toCoordinateFromView: self.mapView)
var title: String! = ""
self.mapAnnotations.setObject(newCoordinate, forKey: title) //the error is here
self.mapAnnotations.synchronize()

1 ответ

Решение

Просто измените свой код на следующий

let mapAnnotations = NSUserDefaults.standardUserDefaults()
let newCoordinate = self.mapView.convertPoint(touchPoint, toCoordinateFromView: self.mapView)
let lat = NSNumber(double: newCoordinate.latitude)
let lon = NSNumber(double: newCoordinate.longitude)
let userLocation: NSDictionary = ["lat": lat, "long": lon]
self.mapAnnotations.setObject(userLocation, forKey: "userLocation") //the error is here
self.mapAnnotations.synchronize()

Что я сделал, это:

  • Создать два NSNumber объекты с Doubleи собрал их в NSDictionary (а не Свифт Dictionary).
  • Прошло это NSDictionary быть спасенным вашим NSUserDefaults, который должен принять это сейчас, так же, как код Objective-C.
Другие вопросы по тегам