Migration zu GMSPlaceField als NS_OPTIONS

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

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

  • Wenn Sie Swift verwenden:Ihre Implementierung funktioniert nicht, wenn Sie die Syntax GMSPlaceField(rawValue:) als Konstruktor verwenden. Ältere SDK-Versionen haben als optionales GMSPlaceField? zurückgegeben. Version 4.0.0 und höher gibt einen nicht optionalen GMSPlaceField-Wert zurück. Alle Vorgänge, die für die optionalen Prüfungen ausgeführt werden, z. B. bedingte Prüfungen oder erzwungene Entpackungen, schlagen fehl. Darüber hinaus können Sie jetzt die Array-Syntax verwenden, um GMSPlaceField-Werte zu kombinieren.

Code migrieren

Bestimmte Syntaxen zum bedingten Entpacken oder Erzwingen des Entpackens funktionieren in Swift nicht mehr. Die folgenden Beispiele zeigen, wie Sie diese Probleme beheben können. Außerdem sehen Sie, wie GMSPlaceField mit der Arraysyntax deklariert wird:

Bedingtes Entpacken

Die Anweisung im folgenden Beispiel zeigt, wie mit if ein GMSPlaceField-Array erstellt wird, das ein bedingtes Entpacken erfordert. Dies führt zu einem Compiler-Fehler: „Initialisierer für bedingte Bindung muss den Typ „Optional“ haben, nicht den Typ GMSPlaceField“.

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

Um dieses Problem zu beheben, entfernen Sie die if-Anweisung wie hier gezeigt:

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

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

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

Entpacken erzwingen

Die Anweisung im folgenden Beispiel zeigt, dass GMSPlaceField als nicht optionaler Typ verwendet wird. Dies führt zu einem Compiler-Fehler („Unwrap-Wert des nicht optionalen Typs „GMSPlaceField“ kann nicht erzwungen werden“):

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

Um dieses Problem zu beheben, verwenden Sie GMSPlaceField als optionalen Typ, wie hier gezeigt:

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

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

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