Od wersji 4.0.0 pakietu SDK Miejsc na iOS typ GMSPlaceField
korzysta teraz z makra NS_OPTIONS
. Pakiet SDK w wersjach 3.x ma GMSPlaceField
o wartości NS_ENUM
i nadal są one obsługiwane.
Jeśli używasz trybu Objective-C: nie ma żadnych konsekwencji. Możesz nadal korzystać z usługi
GMSPlaceField
tak jak dotychczas.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 jako opcjonalneGMSPlaceField?
. Wersja 4.0.0 i nowsze zwracają nieopcjonalną wartośćGMSPlaceField
. Wszystkie operacje wykonywane w ramach opcjonalnej, takie jak kontrole warunkowe lub wymuszanie wyodrębniania, zakończą się niepowodzeniem. Dodatkowo możesz teraz używać składni tablicy do łączenia funkcjiGMSPlaceField
Migracja kodu
Niektóre składniowe wyodrębnianie warunkowe lub wymuszanie wyodrębniania składni przestaną działać w pliku Swift.
Z przykładów poniżej dowiesz się, jak rozwiązać te problemy, a także za pomocą składni tablicy do zadeklarowania atrybutu GMSPlaceField
:
Wyodrębnianie warunkowe
Instrukcja w poniższym przykładzie pokazuje użycie narzędzia if
do utworzenia tablicy GMSPlaceField
, która wymaga warunkowego wyodrębniania. Spowoduje to błąd kompilatora („inicjator do 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
, jak pokazano tutaj:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Możesz też użyć składni tablicy, tak 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 wystąpienie błędu kompilatora („Nie można wymusić wyodrębnienia wartości typu GMSPlaceField.”):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, jako opcjonalny typ użyj GMSPlaceField
, jak pokazano tutaj:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Możesz też użyć składni tablicy, tak jak pokazano poniżej:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]