A partire dalla versione 4.0.0 dell'SDK Places per 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 usare
GMSPlaceField
come prima.Se utilizzi Swift: l'implementazione non funzionerà se utilizzi la sintassi
GMSPlaceField(rawValue:)
come costruttore, che le versioni precedenti dell'SDK hanno restituito comeGMSPlaceField?
facoltativo. La versione 4.0.0 e successive restituisce un valoreGMSPlaceField
non facoltativo; tutte le operazioni eseguite nel modello facoltativo, come i controlli condizionali o l'unwrapping forzato, non andranno a buon fine. Inoltre, ora puoi utilizzare la sintassi dell'array per combinare gliGMSPlaceField
Migrazione del codice
Alcune sintassi di unwrapping condizionale o forzano l'unwrapping non funzioneranno in Swift.
I seguenti esempi mostrano come risolvere questi problemi e mostrano anche l'utilizzo della sintassi dell'array per dichiarare GMSPlaceField
:
Unwrapping condizionale
L'istruzione nell'esempio seguente mostra l'uso di if
per creare un
array GMSPlaceField
che richiede l'unwrapping condizionale. Verrà visualizzato un errore di compilazione ("L'inizializzazione per l'associazione condizionale deve avere il tipo Facoltativo, 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 unwrapping
L'istruzione nell'esempio seguente mostra l'uso di GMSPlaceField
come tipo non facoltativo. Verrà visualizzato un errore di compilazione ("Impossibile forzare l'unwrapping del valore di unwrapping di 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]