A partire dalla versione 4.0.0 di Places SDK per iOS, GMSPlaceField
utilizza ora la macro NS_OPTIONS
. Le versioni 3.x dell'SDK hanno GMSPlaceField
come NS_ENUM
e sono ancora supportati.
Se utilizzi Objective-C: non ci sono implicazioni. Puoi continuare usando
GMSPlaceField
come prima.Se utilizzi Swift: la tua implementazione si interromperà se utilizzi la sintassi
GMSPlaceField(rawValue:)
come costruttore, quali versioni precedenti dell'SDK restituito comeGMSPlaceField?
facoltativo. Versione 4.0.0 e successive restituisce un valoreGMSPlaceField
non facoltativo; qualsiasi operazione eseguiti sull'elemento facoltativo, come i controlli condizionali o l'unwrapping forzato, errore. Inoltre, ora puoi utilizzare la sintassi dell'array per combinare iGMSPlaceField
Migrazione del codice
Alcune sintassi di unwrapping condizionale o di forzatura dell'unwrapping verranno utilizzate in Swift.
I seguenti esempi mostrano come risolvere questi problemi e dimostrano anche l'utilizzo
sintassi dell'array per dichiarare GMSPlaceField
:
Unwrapping condizionale
L'istruzione nell'esempio seguente mostra l'utilizzo di if
per creare una
Array GMSPlaceField
che richiede l'unwrapping condizionale. Questo comporterà
in un errore del compilatore ("Inizializzatore per l'associazione condizionale deve avere
tipo, 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 qui:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Puoi anche utilizzare la sintassi dell'array, come mostrato qui:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Forza l'unwrapping
L'istruzione nell'esempio seguente mostra l'utilizzo di GMSPlaceField
come
di tipo facoltativo. Questo causerà un errore del compilatore ("Impossibile forzare il valore di unwrapping
del tipo non facoltativo GMSPlaceField"."):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Per risolvere il problema, utilizza GMSPlaceField
come tipo facoltativo, come mostrato qui:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Puoi anche utilizzare la sintassi dell'array, come mostrato qui:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]