Migrazione a GMSPlaceField come NS_OPTIONS

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 come GMSPlaceField? facoltativo. La versione 4.0.0 e successive restituisce un valore GMSPlaceField non facoltativo. Eventuali operazioni eseguite su facoltativo, come controlli condizionali o scollegamento forzato, non andranno a buon fine. Inoltre, ora puoi utilizzare la sintassi dell'array per combinare i valori GMSPlaceField

Eseguire la migrazione del codice

Determinate sintassi di scollegamento condizionale o di scollegamento forzato non funzioneranno in Swift. Gli esempi riportati di seguito mostrano come risolvere questi problemi e illustrano anche l'utilizzo della sintassi dell'array per dichiarare GMSPlaceField:

Unwrapping condizionale

L'istruzione nell'esempio seguente mostra l'utilizzo di if per creare un array GMSPlaceField che richiede l'estrazione condizionale. Ciò comporterà 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 dell'array, come mostrato di seguito:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

Annullamento del wrapping forzato

L'istruzione nell'esempio seguente mostra l'utilizzo di GMSPlaceField come tipo obbligatorio. Ciò comporterà un errore del compilatore ("Impossibile forzare lo scollegamento del valore 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 di seguito:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

Puoi anche utilizzare la sintassi dell'array, come mostrato di seguito:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]