Począwszy od wersji 4.0.0 pakietu SDK Miejsc na iOS system GMSPlaceField
używa teraz makra NS_OPTIONS
. Wersje 3.x pakietu SDK mają GMSPlaceField
jako NS_ENUM
i nadal są obsługiwane.
Jeśli korzystasz z celu C: nie ma konsekwencji. Możesz dalej korzystać z
GMSPlaceField
.Jeśli korzystasz ze Swift: Twoja implementacja zostanie przerwana, jeśli używasz składni
GMSPlaceField(rawValue:)
jako konstruktora, a starsze wersje pakietu SDK zostały zwrócone jako opcjonalnyGMSPlaceField?
. W wersji 4.0.0 i nowszych zwracają opcjonalną wartośćGMSPlaceField
. Wszystkie operacje wykonywane na opcjonalnej operacji, takie jak testy warunkowe czy wymuszanie rozpakowywania, zakończą się niepowodzeniem. Dodatkowo możesz teraz używać składni tablic, aby łączyć atrybutyGMSPlaceField
Migracja kodu
Niektóre składni warunkowe lub wymuszenia składni powodują błędy w kodzie Swift.
Poniższe przykłady pokazują, jak rozwiązać te problemy, a także pokazują składnię tablicy GMSPlaceField
:
Opakowanie warunkowe
Instrukcja poniżej pokazuje, jak za pomocą if
utworzyć tablicę GMSPlaceField
, która wymaga warunkowego wyodrębnienia. Spowoduje to błąd błędu kompilatora („Inicjator wiązania warunkowego musi zawierać typ opcjonalny, 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
w następujący sposób:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Możesz też użyć składni tablicy, jak pokazano poniżej:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Wymuś rozpakowanie
Instrukcja poniżej pokazuje użycie GMSPlaceField
jako opcjonalnego typu. Spowoduje to wygenerowanie błędu kompilatora („Nie można wymusić rozpakowywania wartości opcjonalnego typu GMSPlaceField”.):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, użyj GMSPlaceField
jako opcjonalnego typu w następujący sposób:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Możesz też użyć składni tablicy, jak pokazano poniżej:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]