Создание CLLocationCoordinate2D с использованием протокола Codable - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь согласовать пользовательский класс с протоколом MKAnnotation. Чтобы создать этот класс, я декодирую из канала JSON с использованием протокола Codable.

class CustomClass: NSObject, Codable, MKAnnotation {

  var id: String
  var name: String
  var lat: Double?
  var lon: Double?
  var coordinate: CLLocationCoordinate2D

  // Note, the coordinate var is not a part of the decoded JSON file. 
  // It is derived from the lat and lon attributes, which are in the
  // JSON file.

  enum CodingKeys: String, CodingKey {
    case id
    case name
    case lat
    case lon
  }

  required init(from decoder: Decoder) throws {
    let values = try decoder.container(keyedBy: CodingKeys.self)
    self.id = try values.decode(String.self, forKey: .id)
    self.name = try values.decodeIfPresent(String.self, forKey: .name)
    self.lat = try values.decodeIfPresent(Double.self, forKey: .lat)
    self.lon = try values.decodeIfPresent(Double.self, forKey: .lon)
    self.coordinate = CLLocationCoordinate2D(latitude: self.lat!, longitude: self.lon!)
  }    
}

Когда я запускаю этот код, я получаю следующую ошибку в строке, где я устанавливаю переменную self.coordinate:

Поток 2. Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

Похоже, переменная координат устанавливается перед декодированием переменных lat и lon. Как я могу установить координату var, используя декодированные значения lat и lon в моем методе init?

...