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

  • Si vous utilisez Objective-C:cela n'a aucune incidence. Vous pouvez continuer à utiliser GMSPlaceField comme auparavant.

  • Si vous utilisez Swift:votre implémentation ne fonctionnera pas si vous utilisez la syntaxe GMSPlaceField(rawValue:) comme constructeur, que les anciennes versions du SDK renvoyaient en tant que GMSPlaceField? facultatif. Les versions 4.0.0 et ultérieures renvoient une valeur GMSPlaceField non facultative. Toutes les opérations effectuées sur les options facultatives, telles que les vérifications conditionnelles ou les désencapsulations forcées, échoueront. En outre, vous pouvez désormais utiliser une 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 fonctionnent 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ésencapsulation conditionnelle

L'instruction de l'exemple suivant montre comment utiliser if pour créer un tableau GMSPlaceField qui nécessite une désencapsulation conditionnelle. Cela entraînera une erreur de compilateur ("L'initialiseur pour la 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 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 montre comment utiliser GMSPlaceField comme type non facultatif. Cela entraînera une erreur de compilateur ("Impossible de forcer la désencapsulation de la valeur 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 GMSPlaceField 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]