Migrar a GMSPlaceField como NS_OPTIONS

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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 son compatibles.

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

  • Si usas Swift: La implementación fallará si usas la sintaxis GMSPlaceField(rawValue:) como constructor, que son las versiones anteriores del SDK que se mostraron como GMSPlaceField? opcionales. 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, como las verificaciones condicionales o la desunión forzosa, fallará. Además, ahora puedes usar la sintaxis de arreglo para combinar GMSPlaceField

Migra tu código

Ciertas sintaxis condicionales de desunión o forzado se romperán en Swift. En los siguientes ejemplos, se muestra cómo solucionar estos problemas y también se demuestra el uso de la sintaxis de arreglo para declarar GMSPlaceField:

Separación condicional

En la declaración del siguiente ejemplo, se muestra cómo usar if para crear un arreglo GMSPlaceField que requiere una separación condicional. Esto generará un error de 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 aquí:

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

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

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

Forzar desunión

La declaración en el siguiente ejemplo muestra cómo usar 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 un 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 arreglo, como se muestra aquí:

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