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:sua implementação vai ser interrompida se você estiver usando a sintaxe GMSPlaceField(rawValue:) como construtor, que versões mais antigas do SDK retornam como um GMSPlaceField? opcional. A versão 4.0.0 e mais recentes retornam um valor GMSPlaceField não opcional. Qualquer operação realizada nos opcionais, como verificações condicionais ou desencapsulamentos forçados, apresentarão falha. Além disso, agora é possível usar sintaxe de matriz para combinar GMSPlaceFields.

Como migrar seu código

Algumas sintaxes de desencapsulamento condicional ou forçada de desencapsulamento são interrompidas no Swift. Os exemplos abaixo mostram como corrigir esses problemas e também demonstram o uso da sintaxe de 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 para 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

Você também pode 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 do compilador ("Não é possível forçar desencapsulamento 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, como mostrado aqui:

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