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; qualsiasi operazione eseguita su quello facoltativo, ad esempio controlli condizionali o forzature di unwrap, non andrà a buon fine. Inoltre, ora puoi utilizzare la sintassi degli array per combinare i GMSPlaceField

Migrazione del codice

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

Unwrapping condizionale

L'istruzione nell'esempio seguente mostra l'utilizzo di if per creare un array GMSPlaceField che richiede l'unwrapping condizionale. Verrà visualizzato 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 degli array, come mostrato di seguito:

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

Forza annullamento del wrapping

L'istruzione nel seguente esempio mostra l'utilizzo di GMSPlaceField come tipo non facoltativo. Verrà generato un errore del compilatore ("Cannot force unwrap value of non-optional type 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 degli array, come mostrato di seguito:

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