Migration zu GMSPlaceField als NS_OPTIONS

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

  • Wenn Sie Objective-C verwenden: Es gibt keine Auswirkungen. Du kannst fortfahren mit GMSPlaceField wie zuvor.

  • Wenn Sie Swift verwenden:Ihre Implementierung funktioniert nicht, wenn Sie GMSPlaceField(rawValue:)-Syntax als Konstruktor verwenden, mit dem ältere Versionen des SDKs, das als optionales GMSPlaceField? zurückgegeben wird. Version 4.0.0 und höher gibt einen nicht optionalen GMSPlaceField-Wert zurück. alle Vorgänge, die wie bedingte Prüfungen oder erzwungene Entpackungen ausgeführt wird, scheitern. 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 veranschaulichen, wie diese Probleme behoben werden können und wie die Verwendung von Array-Syntax zur Deklaration von GMSPlaceField verwendet:

Bedingtes Entpacken

Die Anweisung im folgenden Beispiel zeigt, wie Sie mit if einen GMSPlaceField-Array, das ein bedingtes Entpacken erfordert. Daraus ergibt sich: in einem Compilerfehler ("Initializer für bedingte Bindung muss optional Typ, nicht GMSPlaceField".)

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

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

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

Sie können auch die Arraysyntax verwenden, wie hier gezeigt:

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

Entpacken erzwingen

Die Anweisung im folgenden Beispiel zeigt die Verwendung von GMSPlaceField als Nicht- optional. Dies führt zu einem Compiler-Fehler ("Unwrap-Wert kann nicht erzwungen werden"). des nicht optionalen Typs GMSPlaceField."):

// 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 die Arraysyntax verwenden, wie hier gezeigt:

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