Migrazione a GMSPlaceField come NS_OPTIONS

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 come GMSPlaceField? facoltativo. Versione 4.0.0 e successive restituisce un valore GMSPlaceField 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 i GMSPlaceField

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]