Migrar para GMSPlaceField como NS_OPTIONS

A partir da versão 4.0.0 do SDK do Places para iOS, o tipo GMSPlaceField agora usa a macro NS_OPTIONS. As versões 3.x do SDK têm GMSPlaceField como NS_ENUM e ainda são compatíveis.

  • Se você estiver usando Objective-C:não há implicações. Você pode continuar usando GMSPlaceField como antes.

  • Se você estiver usando Swift: a implementação será interrompida se você estiver usando a sintaxe GMSPlaceField(rawValue:) como o construtor, que as versões mais antigas do SDK retornavam como um GMSPlaceField? opcional. A versão 4.0.0 e mais recentes retornam um valor GMSPlaceField não opcional. Todas as operações realizadas no opcional, como verificações condicionais ou desembrulhos forçados, falharão. Além disso, agora você pode usar a sintaxe de matriz para combinar GMSPlaceFields.

Migrar o código

Algumas sintaxes de desembrulho condicional ou forçado serão interrompidas no Swift. Os exemplos a seguir mostram como corrigir esses problemas e também demonstram o uso da sintaxe de matriz para declarar GMSPlaceField:

Desembrulho condicional

A instrução no exemplo a seguir mostra o uso de if para criar uma matriz GMSPlaceField que exige desembrulho condicional. Isso resultará em um erro do compilador ("O inicializador para vinculação condicional precisa ter um tipo opcional, não GMSPlaceField").

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

Para corrigir esse problema, remova a instrução if, conforme mostrado aqui:

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

Você também pode usar a sintaxe de matriz, conforme mostrado aqui:

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

Desembrulho forçado

A instrução no exemplo a seguir mostra o uso de GMSPlaceField como um tipo não opcional. Isso resultará em um erro do compilador ("Não é possível forçar o desembrulho do valor do tipo não opcional GMSPlaceField"):

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

Para corrigir esse problema, use GMSPlaceField como um tipo opcional, conforme mostrado aqui:

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

Você também pode usar a sintaxe de matriz, conforme mostrado aqui:

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