A partire dalla versione 4.0.0 di Places SDK for iOS, il tipo GMSPlaceField
ora utilizza la macro NS_OPTIONS
. Le versioni 3.x dell'SDK hanno GMSPlaceField
come NS_ENUM
e sono ancora supportate.
Se utilizzi Objective-C:non ci sono implicazioni. Puoi continuare a utilizzare
GMSPlaceField
come prima.Se utilizzi Swift: l'implementazione non funzionerà se utilizzi la sintassi
GMSPlaceField(rawValue:)
come costruttore, che le versioni precedenti dell'SDK restituivano comeGMSPlaceField?
facoltativo. La versione 4.0.0 e successive restituisce un valoreGMSPlaceField
non facoltativo; qualsiasi operazione eseguita su quello facoltativo, ad esempio controlli condizionali o forzature di unwrap, non andrà a buon fine. Inoltre, ora puoi utilizzare la sintassi degli array per combinare iGMSPlaceField
Migrazione del codice
Alcune sintassi di unwrap condizionale o forzato non funzioneranno in Swift.
Gli esempi riportati di seguito mostrano come risolvere questi problemi e illustrano anche l'utilizzo
della sintassi degli array per dichiarare GMSPlaceField
:
Unwrapping condizionale
L'istruzione nell'esempio seguente mostra l'utilizzo di if
per creare un array GMSPlaceField
che richiede l'unwrapping condizionale. Verrà visualizzato
un errore del compilatore ("L'inizializzatore per l'associazione condizionale deve avere il tipo Optional, non GMSPlaceField
").
// Before.
if let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }
Per risolvere il problema, rimuovi l'istruzione if
, come mostrato di seguito:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Puoi anche utilizzare la sintassi degli array, come mostrato di seguito:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Forza annullamento del wrapping
L'istruzione nel seguente esempio mostra l'utilizzo di GMSPlaceField
come tipo non
facoltativo. Verrà generato un errore del compilatore ("Cannot force unwrap value
of non-optional type GMSPlaceField."):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Per risolvere il problema, utilizza GMSPlaceField
come tipo facoltativo, come mostrato di seguito:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Puoi anche utilizzare la sintassi degli array, come mostrato di seguito:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]