Migrar a GMSPlaceField como NS_OPTIONS

A partir de la versión 4.0.0 del SDK de Places para iOS, el tipo GMSPlaceField ahora usa la macro NS_OPTIONS. Las versiones 3.x del SDK tienen GMSPlaceField como NS_ENUM y siguen siendo compatibles.

  • Si usa Objective-C: no hay consecuencias. Puedes seguir usando GMSPlaceField como antes.

  • Si usas Swift: La implementación se interrumpirá si usas la sintaxis GMSPlaceField(rawValue:) como constructor, que las versiones anteriores del SDK mostraron como GMSPlaceField? opcional. La versión 4.0.0 y las versiones posteriores muestran un valor GMSPlaceField no opcional. Cualquier operación que se realice en la opción opcional, como las verificaciones condicionales o la separación forzada, fallará. Además, ahora puedes usar la sintaxis de array para combinar objetos GMSPlaceField

Cómo migrar tu código

Ciertas sintaxis condicional de desunión o desajuste de sintaxis fallarán en Swift. En los siguientes ejemplos, se muestra cómo solucionar estos problemas y se muestra cómo usar la sintaxis de array para declarar GMSPlaceField:

Separación condicional

En la declaración del siguiente ejemplo, se muestra el uso de if para crear un array GMSPlaceField que requiere una separación condicional. Esto generará un error del compilador ("El inicializador para la vinculación condicional debe tener un tipo opcional, no GMSPlaceField").

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

Para solucionar este problema, quita la sentencia if, como se muestra a continuación:

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

También puedes usar la sintaxis de array, como se muestra a continuación:

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

Forzar desunificación

La instrucción del siguiente ejemplo muestra el uso de GMSPlaceField como un tipo no opcional. Esto generará un error de compilador ("No se puede forzar la separación del valor de tipo no opcional GMSPlaceField"):

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

Para solucionar este problema, usa GMSPlaceField como tipo opcional, como se muestra a continuación:

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

También puedes usar la sintaxis de array, como se muestra a continuación:

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