Począwszy od wersji 4.0.0 pakietu Places SDK dla iOS, typ GMSPlaceField
korzysta teraz z makra NS_OPTIONS
. Wersje 3.x pakietu SDK mają GMSPlaceField
w wersji NS_ENUM
i są nadal obsługiwane.
Jeśli używasz kodu Objective-C: nie wiąże się to z żadnymi konsekwencjami. Możesz nadal korzystać z usługi
GMSPlaceField
tak jak wcześniej.Jeśli używasz kodu Swift: implementacja nie działa, jeśli jako konstruktora używasz składni
GMSPlaceField(rawValue:)
, którą starsze wersje pakietu SDK zwracały opcjonalnyGMSPlaceField?
. Wersja 4.0.0 i nowsze zwracają nieopcjonalną wartośćGMSPlaceField
. Wszystkie operacje wykonywane na elementach opcjonalnych, takie jak testy warunkowe czy wymuszanie wyodrębnienia, zakończą się niepowodzeniem. Dodatkowo możesz teraz używać składni tablicy do łączenia funkcjiGMSPlaceField
Migracja kodu
Niektóre składni wyodrębniania warunkowego lub wymuszania wyodrębniania przestaną działać w kodzie Swift.
Poniższe przykłady pokazują, jak rozwiązać te problemy, a także zademonstrują użycie składni tablicy do zadeklarowania atrybutu GMSPlaceField
:
Wyodrębnianie warunkowe
Instrukcja w poniższym przykładzie pokazuje użycie funkcji if
do utworzenia tablicy GMSPlaceField
, która wymaga wyodrębnienia warunkowego. Spowoduje to błąd kompilatora („Inicjator na potrzeby wiązania warunkowego musi mieć 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 podany niżej 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ś wyodrębnienie
Instrukcja w poniższym przykładzie pokazuje, że typ GMSPlaceField
nie jest opcjonalny. Spowoduje to pojawienie się błędu kompilatora („Nie można wymusić wyodrębnienia wartości typu GMSPlaceField bez opcjonalnego użycia”):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, jako opcjonalny typ użyj GMSPlaceField
, jak pokazano poniżej:
// 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]