Od wersji 4.0.0 pakietu Places SDK na iOS typ GMSPlaceField korzysta teraz z makra NS_OPTIONS. Wersje pakietu SDK 3.x mają GMSPlaceField
jako NS_ENUM i są nadal obsługiwane.
Jeśli używasz Objective-C: nie ma to żadnych konsekwencji. Możesz nadal korzystać z
GMSPlaceFieldjak dotychczas.Jeśli używasz języka Swift: Twoja implementacja przestanie działać, jeśli używasz składni
GMSPlaceField(rawValue:)jako konstruktora, który starsze wersje pakietu SDK zwracały jako opcjonalny typGMSPlaceField?. Wersja 4.0.0 i nowsze zwracają wartośćGMSPlaceField, która nie jest opcjonalna. Wszelkie operacje wykonywane na wartości opcjonalnej, takie jak sprawdzanie warunkowe lub wymuszone rozpakowywanie, zakończą się niepowodzeniem. Dodatkowo możesz teraz używać składni tablicy do łączeniaGMSPlaceField.
Migracja kodu
Niektóre składnie warunkowego lub wymuszonego rozpakowywania w Swift będą nieprawidłowe.
Poniższe przykłady pokazują, jak rozwiązać te problemy, a także jak używać składni tablicy do deklarowania GMSPlaceField:
Wyodrębnianie warunkowe
Instrukcja w przykładzie poniżej pokazuje, jak za pomocą znaku if utworzyć tablicę GMSPlaceField, która wymaga warunkowego rozpakowania. Spowoduje to błąd kompilatora („Initializer for conditional binding must have Optional type, not 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 pokazano tutaj:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Wymuszone wyodrębnianie
W instrukcji w przykładzie poniżej pokazano użycie typu GMSPlaceField jako typu nieopcjonalnego. Spowoduje to błąd kompilatora („Cannot force unwrap value
of non-optional type GMSPlaceField.”):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, użyj GMSPlaceField jako typu opcjonalnego, 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 tutaj:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]