Migration vers GMSPlaceField en tant que NS_OPTIONS

À 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: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 sous la forme d'un GMSPlaceField? facultatif. La version 4.0.0 et les versions ultérieures renvoient une valeur GMSPlaceField non facultative. Toutes les opérations effectuées sur l'élément facultatif, telles que les vérifications conditionnelles ou le forçage de désencapsulation, échoueront. De plus, vous pouvez désormais utiliser la syntaxe de tableau pour combiner des GMSPlaceField.

Migrer votre code

Certaines syntaxes d'ouverture conditionnelle ou forcée 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ésencapsulage conditionnel. Cela entraînera une erreur de compilateur ("L'initialiseur de liaison conditionnelle doit avoir le type Optional, 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 illustré ci-dessous:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

Forcer la désencapsulation

L'instruction de l'exemple suivant montre comment utiliser GMSPlaceField comme type non facultatif. Cela entraînera une erreur de compilateur ("Impossible de forcer le désemballage de la valeur du type non facultatif 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é ci-dessous:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

Vous pouvez également utiliser la syntaxe de tableau, comme illustré ci-dessous:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]