Migration zu GMSPlaceField als NS_OPTIONS

Ab Version 4.0.0 des Places SDK for iOS wird für den Typ GMSPlaceField das NS_OPTIONS-Makro verwendet. Version 3.x des SDK hat GMSPlaceField als NS_ENUM und wird weiterhin unterstützt.

  • Wenn Sie Objective-C verwenden:Es gibt keine Auswirkungen. Sie können GMSPlaceField weiterhin wie gewohnt verwenden.

  • Wenn Sie Swift verwenden:Ihre Implementierung funktioniert nicht mehr, wenn Sie die GMSPlaceField(rawValue:)-Syntax als Konstruktor verwenden. In älteren Versionen des SDK wurde sie als optionales GMSPlaceField? zurückgegeben. In Version 4.0.0 und höher wird ein nicht optionaler GMSPlaceField-Wert zurückgegeben. Alle Vorgänge, die für den optionalen Wert ausgeführt werden, z. B. bedingte Prüfungen oder Force Unwraps, schlagen fehl. Außerdem können Sie jetzt die Array-Syntax verwenden, um GMSPlaceFields zu kombinieren.

Code migrieren

Bestimmte Syntaxen für das bedingte oder erzwungene Entpacken funktionieren in Swift nicht mehr. Die folgenden Beispiele zeigen, wie Sie diese Probleme beheben können. Außerdem wird die Verwendung der Array-Syntax zum Deklarieren von GMSPlaceField veranschaulicht:

Bedingtes Entpacken

Die Anweisung im folgenden Beispiel zeigt die Verwendung von if zum Erstellen eines GMSPlaceField-Arrays, für das ein bedingtes Entpacken erforderlich ist. Dies führt zu einem Compilerfehler („Initializer for conditional binding must have Optional type, not GMSPlaceField“).

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

Entfernen Sie die if-Anweisung, um dieses Problem zu beheben:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

Sie können auch die Array-Syntax verwenden, wie hier gezeigt:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

Erzwungenes Entpacken

Die Anweisung im folgenden Beispiel zeigt die Verwendung von GMSPlaceField als nicht optionalen Typ. Dies führt zu einem Compilerfehler („Cannot force unwrap value of non-optional type GMSPlaceField.“):

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

Verwenden Sie zur Behebung dieses Problems GMSPlaceField als optionalen Typ, wie hier gezeigt:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

Sie können auch die Array-Syntax verwenden, wie hier gezeigt:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]