Migrar para GMSPlaceField como NS_OPTIONS

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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 o Objective-C:não há implicações. Você pode continuar usando GMSPlaceField como antes.

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

Como migrar o código

Algumas sintaxes condicionais de desencapsulamento ou descompactação vão falhar em Swift. Os exemplos a seguir mostram como corrigir esses problemas e também demonstram o uso da sintaxe da matriz para declarar GMSPlaceField:

Desencapsulamento condicional

A instrução no exemplo a seguir mostra o uso de if para criar uma matriz GMSPlaceField que requer desencapsulamento condicional. Isso resultará em um erro do compilador. "O inicializador da vinculação condicional precisa ter o 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

Também é possível usar a sintaxe de matriz, como mostrado aqui:

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

Forçar desencapsulamento

A instrução no exemplo a seguir mostra o uso de GMSPlaceField como um tipo não opcional. Isso resultará em um erro no compilador ("Não é possível forçar o desencapsulamento de 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, como mostrado aqui:

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

Também é possível usar a sintaxe de matriz, como mostrado aqui:

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