Migrazione a GMSPlaceField come NS_OPTIONS

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 come GMSPlaceField? facoltativo. La versione 4.0.0 e successive restituisce un valore GMSPlaceField 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 gli GMSPlaceField

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]