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