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 optionalesGMSPlaceField?
zurückgegeben wird. Version 4.0.0 und höher gibt einen nicht optionalenGMSPlaceField
-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, umGMSPlaceField
-Werte zu kombinieren.
Code migrieren
Bestimmte Syntaxen zum bedingten Entpacken oder Erzwingen des Entpackens funktionieren in Swift nicht mehr.
Die folgenden Beispiele zeigen, 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]