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 ではなく Optional 型である必要があります」)。

// 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]