3

CLGeocoder逆ジオロケーションに使用して、の配列を取得していCLPlacemarkます。米国外 (つまり -27,127) で GPS を使用して にアクセスするplacemark.postalCodeと、アプリが次のようにクラッシュします。

「致命的なエラー: オプション値のラップ解除中に予期せず nil が見つかりました」.

郵便番号が利用できない場所のようですplacemark.postalCodenilただしpostalCode、Swift の戻り値の型は次のString!とおりです。

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

nilのゲッターが原因でクラッシュが発生するため、is for をテストすることさえできませんpostalCode

このクラッシュを防ぐ方法はありますか? ありがとうございました!

4

1 に答える 1

6

オプションであるため、暗黙的にアンラップされている場合でも、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")
}
于 2014-12-27T21:05:29.943 に答える