Migration vers GMSPlaceField en tant que NS_OPTIONS

À 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 que GMSPlaceField? facultatif. Versions 4.0.0 et ultérieures renvoie une valeur GMSPlaceField 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éments GMSPlaceField.

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]