À compter de la version 4.0.0 du SDK Places pour iOS, GMSPlaceField
utilise désormais la macro NS_OPTIONS
. Les versions 3.x du SDK incluent GMSPlaceField
que NS_ENUM
et sont toujours acceptés.
Si vous utilisez Objective-C, il n'y a aucune conséquence. Vous pouvez continuer en utilisant
GMSPlaceField
comme précédemment.Si vous utilisez Swift:votre implémentation ne fonctionnera pas si vous utilisez la syntaxe
GMSPlaceField(rawValue:)
en tant que constructeur, que les anciennes versions du SDK est renvoyé en tant queGMSPlaceField?
facultatif. Versions 4.0.0 et ultérieures renvoie une valeurGMSPlaceField
non facultative ; toutes les opérations sont effectuées sur l'option facultative, comme les vérifications conditionnelles ou les désencapsulations forcées, échouer. En outre, vous pouvez désormais utiliser la syntaxe de tableau pour combiner des élémentsGMSPlaceField
.
Migrer votre code
Certaines syntaxes de désencapsulation conditionnelle ou de désencapsulation forcée ne fonctionneront plus en Swift.
Les exemples suivants montrent comment résoudre ces problèmes et comment utiliser
pour déclarer GMSPlaceField
:
Désencapsulation conditionnelle
L'instruction de l'exemple suivant montre comment utiliser if
pour créer un
Tableau GMSPlaceField
nécessitant une désencapsulation conditionnelle. Cela se traduira par
dans une erreur de compilateur ("l'initialiseur pour la liaison conditionnelle doit avoir
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é ci-dessous:
// 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]
Forcer la désencapsulation
L'instruction de l'exemple suivant illustre l'utilisation de GMSPlaceField
en tant que propriété non-
type facultatif. Cela entraînera une erreur de compilation ("Cannot force unwrap value"
de type non facultatif GMSPlaceField."):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Pour résoudre ce problème, utilisez le type facultatif GMSPlaceField
, comme indiqué ci-dessous:
// 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]