Places SDK for iOS のバージョン 4.0.0 以降、GMSPlaceField
型で NS_OPTIONS
マクロが使用されるようになります。SDK のバージョン 3.x は NS_ENUM
として GMSPlaceField
を持ち、現在もサポートされています。
Objective-C を使用している場合: 影響はありません。
GMSPlaceField
は引き続きご利用いただけます。Swift を使用している場合: 古いバージョンの SDK がオプションの
GMSPlaceField?
として返したGMSPlaceField(rawValue:)
構文をコンストラクタとして使用している場合、実装が壊れます。バージョン 4.0.0 以降では、オプションではないGMSPlaceField
値が返されます。オプションに対して実行されるオペレーション(条件付きチェックや強制アンラップなど)は失敗します。また、配列構文を使用してGMSPlaceField
を結合できるようになりました。
コードの移行
Swift では、特定の条件付きラッピング解除または強制ラッピング解除の構文が機能しません。次の例は、これらの問題を修正する方法と、配列構文を使用して GMSPlaceField
を宣言する方法を示しています。
条件付きアンラップ
次の例のステートメントは、if
を使用して GMSPlaceField
配列を作成し、条件付きアンラップを必要とすることを示しています。この場合、コンパイラ エラー(「条件付きバインディングのイニシャライザは Optional 型でなければなりません。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]