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")
}