GMSPlaceField で NS_OPTIONS を使用する

Places SDK for iOS のバージョン 4.0.0 以降、GMSPlaceField タイプで NS_OPTIONS マクロが使用されるようになりました。バージョン 3.x の SDK では GMSPlaceFieldNS_ENUM となっており、引き続きサポートされます。

  • Objective-C を使用している場合: 特に影響はありません。以前と同様に GMSPlaceField を使用できます。

  • Swift を使用している場合: コンストラクタとして GMSPlaceField(rawValue:) 構文を使用している場合、古いバージョンの SDK ではオプションの GMSPlaceField? として返されていた、実装が破損します。バージョン 4.0.0 以降では、オプションの GMSPlaceField 値を返します。条件付きチェックやラップ解除の強制など、オプションに対して実行されるオペレーションは失敗します。さらに、配列構文を使用して GMSPlaceField を結合できるようになりました。

コードの移行

Swift では、特定の条件付きラップ解除または強制ラップ解除の構文が破損します。次の例は、これらの問題を修正する方法と、配列構文を使用して GMSPlaceField を宣言する方法を示しています。

条件付きラップ解除

次の例のステートメントは、if を使用して、条件付きラップ解除を必要とする GMSPlaceField 配列を作成する方法を示しています。この場合、コンパイラ エラーが発生します(「条件付きバインディングのイニシャライザには GMSPlaceField ではなく、オプションのタイプが必要です」)。

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

この問題を解決するには、次のように if ステートメントを削除します。

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

以下に示すように、配列構文を使用することもできます。

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

強制的にラップ解除

次の例のステートメントでは、オプションではないタイプとして GMSPlaceField を使用しています。その結果、コンパイラ エラー(「Cannot force unwrap value of non-optional type GMSPlaceField.」)が発生します。

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

この問題を解決するには、次に示すように、オプションのタイプとして GMSPlaceField を使用します。

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

以下に示すように、配列構文を使用することもできます。

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]