Migrar a GMSPlaceField como NS_OPTIONS

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

  • Si usas Objective‐C, no habrá implicaciones. Puedes continuar usando GMSPlaceField como antes.

  • Si usas Swift: Si usas Swift, tu implementación no funcionará. la sintaxis GMSPlaceField(rawValue:) como el constructor, que en versiones anteriores del SDK se muestra como un GMSPlaceField? opcional. Versión 4.0.0 y posteriores muestra un valor GMSPlaceField no opcional. cualquier operación que se que se llevan a cabo en la opción opcional, como las verificaciones condicionales o la desenvolvimiento forzado, fallan. Además, ahora puedes usar la sintaxis de array para combinar objetos GMSPlaceField.

Migra tu código

Ciertas sintaxis de desenvolvimiento condicional o desenvolvimiento forzado fallarán en Swift. En los siguientes ejemplos, se muestra cómo solucionar estos problemas Sintaxis del array para declarar GMSPlaceField:

Desenvolvimiento condicional

La sentencia del siguiente ejemplo muestra cómo usar if para crear una Array GMSPlaceField que requiere un desenvolvimiento condicional. Esto generará en un error del compilador ("El inicializador para la vinculación condicional debe tener Opcional tipo, 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 aquí:

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

Forzar el desenvolvimiento

En la sentencia del siguiente ejemplo, se muestra el uso de GMSPlaceField como una regla tipo opcional. Esto generará un error del compilador ("No se puede forzar la separación del valor"). con el 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 array, como se muestra aquí:

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