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 を使用しています。これにより、コンパイラ エラー(「オプション以外のタイプの 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]