Migrar para GMSPlaceField como NS_OPTIONS

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

  • 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 será corrompida se você estiver usando a sintaxe GMSPlaceField(rawValue:) como construtor, que versões mais antigas do SDK retornado como um GMSPlaceField? opcional. Versão 4.0.0 e mais recentes retorna um valor GMSPlaceField não opcional; as operações que são realizados no opcional, como verificações condicionais ou desencapsulamentos forçados, falhar. Além disso, agora você pode usar uma sintaxe de matriz para combinar GMSPlaceFields.

Como migrar seu código

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

Desencapsulamento condicional

A instrução no exemplo a seguir mostra o uso de if para criar um Matriz GMSPlaceField que requer desencapsulamento condicional. Isso resultará em em um erro do compilador ("OInitializer para vinculação condicional deve ter tipo, 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 uma 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 elemento tipo opcional. Isso resultará em um erro do compilador ("Não é possível forçar a separação de valores) 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
)

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

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