A partir da versão 4.0.0 do SDK do Places para iOS, o tipo GMSPlaceField 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 o
GMSPlaceFieldcomo antes.Se você estiver usando Swift:sua implementação vai falhar se você estiver usando a sintaxe
GMSPlaceField(rawValue:)como o construtor, que versões mais antigas do SDK retornavam como umGMSPlaceField?opcional. A versão 4.0.0 e mais recentes retornam um valorGMSPlaceFieldnão opcional. Qualquer operação realizada no opcional, como verificações condicionais ou desembrulhos forçados, vai falhar. Além disso, agora você pode usar a sintaxe de matriz para combinarGMSPlaceFields
Migrar seu código
Algumas sintaxes de desencapsulamento condicional ou forçado vão falhar no Swift.
Os exemplos a seguir 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 exige desencapsulamento condicional. Isso vai resultar em um erro do compilador ("O inicializador para vinculação condicional precisa ter o tipo Optional, 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, conforme mostrado aqui:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Desencapsulamento forçado
A instrução no exemplo a seguir mostra o uso de GMSPlaceField como um tipo não opcional. Isso vai resultar em um erro do compilador ("Não é possível desembrulhar o 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, conforme mostrado aqui:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]