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 języka Objective-C: nie ma to żadnych konsekwencji. Możesz nadal korzystać z
GMSPlaceField
jak 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]