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