CLPlacemark сбой в Swift

Я использую CLGeocoder для обратной геолокации и получить массив CLPlacemark, Когда я использую GPS за пределами США (т.е. -27,127), а затем доступ placemark.postalCodeприложение вылетает с:

msgstr "фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения".

Кажется, что placemark.postalCode является nil где нет почтового индекса. Но postalCode тип возврата в Swift is String!:

var postalCode: String! { get } // zip code, eg. 95014

Так что я не могу даже проверить это для nil, потому что сбой вызван добытчиком postalCode,

Есть идеи, как предотвратить этот сбой? Спасибо!

1 ответ

Решение

Будучи необязательным, даже если неявно развернут, вы можете проверить его на nil:

if placemark.postalCode != nil {

}

и приложение не будет зависать из-за этого:)

Чтобы доказать это, просто попробуйте этот код на игровой площадке, где 2 неявно развернутых свойства (вычисленное и сохраненное) проверяются на nil:

struct Test {
    var nilComputed: String! { return nil }
    var nilStored: String! = nil
}

var test = Test()

if test.nilComputed != nil {
    print("It's not nil")
} else {
    print("It's nil")
}

if test.nilStored != nil {
    print("It's not nil")
} else {
    print("It's nil")
}
Другие вопросы по тегам