GMSPlaceField で NS_OPTIONS を使用する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Places SDK for iOS のバージョン 4.0.0 以降では、GMSPlaceField タイプで NS_OPTIONS マクロが使用されるようになります。SDK のバージョン 3.x には 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 unvalue 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]