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 aún se admiten.

  • Si usas Objective-C: No hay implicaciones. Puedes seguir usando GMSPlaceField como antes.

  • Si usas Swift: Tu implementación fallará si usas la sintaxis GMSPlaceField(rawValue:) como constructor, que las versiones anteriores del SDK devolvían como un GMSPlaceField? opcional. La versión 4.0.0 y las versiones posteriores devuelven un valor GMSPlaceField no opcional. Fallarán todas las operaciones que se realicen en el opcional, como las verificaciones condicionales o las forzadas. Además, ahora puedes usar la sintaxis de array para combinar GMSPlaceFields.

Migra tu código

Algunas sintaxis de desempaquetado condicional o desempaquetado forzado dejarán de funcionar en Swift. En los siguientes ejemplos, se muestra cómo corregir estos problemas y también se demuestra el uso de la sintaxis de array para declarar GMSPlaceField:

Desempaquetado condicional

La instrucción del siguiente ejemplo muestra el uso de if para crear un array GMSPlaceField que requiere un desenvolvimiento condicional. Esto generará un error del compilador ("El inicializador para la vinculación condicional debe tener el tipo Optional, no GMSPlaceField").

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

Para corregir este problema, quita la instrucción if, como se muestra aquí:

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

También puedes usar la sintaxis de array, como se muestra aquí:

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

Desempaquetado forzado

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

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

Para corregir este problema, usa GMSPlaceField como un tipo opcional, como se muestra aquí:

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

También puedes usar la sintaxis de array, como se muestra aquí:

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