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:Es gibt 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 Versionen des SDKs haben als optionalesGMSPlaceField?
zurückgegeben. Version 4.0.0 und höher gibt einen nicht optionalen Wert fürGMSPlaceField
zurück. Alle Vorgänge, die für die optionale Ausführung ausgeführt werden, z. B. bedingte Prüfungen oder erzwungene Entpackungen, schlagen fehl. Darüber hinaus können Sie jetzt mithilfe der Array-SyntaxGMSPlaceField
-Objekte kombinieren.
Code migrieren
Bestimmte Syntaxen für bedingtes bedingtes oder erzwungenes Entpacken funktionieren in Swift nicht mehr.
Die folgenden Beispiele zeigen, wie Sie diese Probleme beheben können. Außerdem wird veranschaulicht, wie GMSPlaceField
mit der Array-Syntax deklariert wird:
Bedingtes Entpacken
Die Anweisung im folgenden Beispiel zeigt, wie Sie mit if
ein GMSPlaceField
-Array erstellen, für das ein bedingtes Entpacken erforderlich ist. Dies führt zu einem Compiler-Fehler („Der 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 Anweisung if
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, wie 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]