Я пытаюсь согласовать пользовательский класс с протоколом 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?