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 umGMSPlaceField?
opcional. A versão 4.0.0 e mais recentes retornam um valorGMSPlaceField
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 combinarGMSPlaceField
s.
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]