À partir de la version 4.0.0 du SDK Places pour iOS, le type GMSPlaceField utilise désormais la macro NS_OPTIONS. Les versions 3.x du SDK ont GMSPlaceField comme NS_ENUM et sont toujours compatibles.
Si vous utilisez Objective-C : il n'y a aucune implication. Vous pouvez continuer à utiliser
GMSPlaceFieldcomme avant.Si vous utilisez Swift : votre implémentation échouera si vous utilisez la syntaxe
GMSPlaceField(rawValue:)comme constructeur, que les anciennes versions du SDK renvoyaient commeGMSPlaceField?facultatif. La version 4.0.0 et les versions ultérieures renvoient une valeurGMSPlaceFieldnon facultative. Toutes les opérations effectuées sur le facultatif, telles que les vérifications conditionnelles ou les décompressions forcées, échoueront. De plus, vous pouvez désormais utiliser la syntaxe de tableau pour combiner desGMSPlaceField.
Migrer votre code
Certaines syntaxes de décompression conditionnelle ou de décompression forcée échoueront dans Swift.
Les exemples suivants montrent comment résoudre ces problèmes et comment utiliser la syntaxe de tableau pour déclarer GMSPlaceField :
Décompression conditionnelle
L'instruction de l'exemple suivant montre comment utiliser if pour créer un tableau GMSPlaceField qui nécessite une décompression conditionnelle. Cela entraînera une erreur de compilateur ("Initializer for conditional binding must have Optional type, not GMSPlaceField").
// Before.
if let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }
Pour résoudre ce problème, supprimez l'instruction if, comme indiqué ici :
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Vous pouvez également utiliser la syntaxe de tableau, comme indiqué ici :
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Décompression forcée
L'instruction de l'exemple suivant montre comment utiliser GMSPlaceField comme type non facultatif. Cela entraînera une erreur de compilateur ("Cannot force unwrap value of non-optional type GMSPlaceField.") :
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Pour résoudre ce problème, utilisez GMSPlaceField comme type facultatif, comme indiqué ici :
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Vous pouvez également utiliser la syntaxe de tableau, comme indiqué ici :
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]