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