À 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
GMSPlaceField
comme avant.Si vous utilisez Swift : votre implémentation sera interrompue 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 valeurGMSPlaceField
non facultative. Toutes les opérations effectuées sur la valeur facultative, telles que les vérifications conditionnelles ou les déballage forcés, échoueront. De plus, vous pouvez désormais utiliser la syntaxe de tableau pour combiner desGMSPlaceField
.
Migrer votre code
Certaines syntaxes de déballage conditionnel ou forcé ne fonctionneront pas dans Swift.
Les exemples suivants montrent comment résoudre ces problèmes et comment utiliser la syntaxe de tableau pour déclarer GMSPlaceField
:
Déballage conditionnel
L'instruction de l'exemple suivant montre comment utiliser if
pour créer un tableau GMSPlaceField
qui nécessite un déballage conditionnel. Cela entraînera une erreur de compilation ("L'initialiseur pour la liaison conditionnelle doit avoir un type facultatif, et non 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é ci-dessous :
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Désencapsulation forcée
L'instruction de l'exemple suivant montre comment utiliser GMSPlaceField
comme type non facultatif. Cela entraînera une erreur de compilation ("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é ci-dessous :
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]