Począwszy od wersji 4.0.0 pakietu SDK Miejsca na iOS typ GMSPlaceField
używa teraz makra NS_OPTIONS
. Wersje 3.x pakietu SDK mają wartość GMSPlaceField
jako NS_ENUM
i nadal są obsługiwane.
Jeśli używasz języka Objective-C: nie ma żadnych konsekwencji. Nadal możesz używać
GMSPlaceField
tak jak do tej pory.Jeśli używasz Swift: implementacja nie zadziała, jeśli używasz składni
GMSPlaceField(rawValue:)
jako konstruktora, który w starszych wersjach pakietu SDK zwraca opcjonalną wartośćGMSPlaceField?
. Wersja 4.0.0 i nowsze zwracają wartośćGMSPlaceField
, która nie jest opcjonalna. Wszelkie operacje wykonywane na opcjonalnych wartościach, takie jak sprawdzanie warunkowe czy wymuszanie rozpakowania, nie powiedzie się. Dodatkowo możesz teraz używać składni tablic do łączenia wartościGMSPlaceField
Migracja kodu
Niektóre warunkowe lub wymuszone rozpakowania składni nie będą działać w Swift.
Poniższe przykłady pokazują, jak rozwiązać te problemy, a także jak za pomocą składni tablicy zadeklarować zmienną GMSPlaceField
:
Warunkowe rozpakowywanie
W tym przykładzie instrukcja if
służy do utworzenia tablicy GMSPlaceField
, która wymaga warunkowego rozpakowania. Spowoduje to błąd kompilatora („Inicjator dla warunkowego wiązania musi mieć typ Optional, a nie GMSPlaceField
”).
// Before.
if let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }
Aby rozwiązać ten problem, usuń instrukcję if
, jak pokazano poniżej:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Możesz też użyć składni tablicy, jak tutaj:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Wymuszanie rozpakowywania
W poniższym przykładzie użyto instrukcji GMSPlaceField
jako nieopcjonalnej instrukcji. Spowoduje to błąd kompilatora („Nie można wymusić rozpakowania wartości typu GMSPlaceField, który nie jest opcjonalny”).
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, użyj typu opcjonalnego GMSPlaceField
, jak pokazano tutaj:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Możesz też użyć składni tablicy:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]