Migration vers GMSPlaceField en tant que NS_OPTIONS

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

À 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 utilisent GMSPlaceField en tant que NS_ENUM et sont toujours compatibles.

  • Si vous utilisez Objective-C:aucune incidence. Vous pouvez continuer à utiliser GMSPlaceField comme avant.

  • Si vous utilisez Swift:votre implémentation ne fonctionnera pas si vous utilisez la syntaxe GMSPlaceField(rawValue:) en tant que constructeur, qui renvoie les versions antérieures du SDK en tant que 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'option facultative, telles que les vérifications conditionnelles ou le désencapsulation forcé, échoueront. De plus, vous pouvez maintenant utiliser la syntaxe de tableau pour combiner des GMSPlaceField

Migrer votre code

Certaines syntaxes de désencapsulation conditionnelle ou de déballage forcée ne fonctionnent plus dans Swift. Les exemples suivants montrent comment résoudre ces problèmes et illustrent 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ésencapsulation conditionnelle. Une erreur de compilation est alors générée ("l'initialiseur pour la liaison conditionnelle doit être de 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é 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 le déballage

L'instruction de l'exemple suivant montre que GMSPlaceField n'est pas un type facultatif. Une erreur de compilation est alors générée ("Cannot force ununwrap 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é 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]