Сбой CLPlacemark в Swift

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

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

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

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

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

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


person VojtaStavik    schedule 27.12.2014    source источник


Ответы (1)


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

if placemark.postalCode != nil {

}

и приложение не вылетает из-за этого :)

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

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")
}
person Antonio    schedule 27.12.2014
comment
Конечно, ты прав. Я этого не понимал. Спасибо! - person VojtaStavik; 29.12.2014