GMSPlaceField で NS_OPTIONS を使用する

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

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

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

コードを移行する

Swift では、一部の条件付きラップ解除または強制ラップ解除の構文が破損します。 次の例は、これらの問題を解決する方法と、 GMSPlaceField を宣言する配列構文:

条件付きラップ解除

次の例のステートメントは、if を使用して新しい VM を作成する方法を示しています。 条件付きラップ解除が必要な 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]