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 compatibles.

  • Si vous utilisez Objective-C: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. La version 4.0.0 et les versions 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 de force de désencapsulations, échoueront. De plus, vous pouvez maintenant utiliser la syntaxe de tableau pour combiner les GMSPlaceField.

Migrer votre code

Certaines syntaxes de désencapsulation conditionnelle ou de force de déballage sont défaillantes dans Swift. Les exemples suivants montrent comment résoudre ces problèmes et montrent comment utiliser la syntaxe de tableau pour déclarer GMSPlaceField:

Désenveloppement conditionnel

L'instruction de l'exemple suivant montre comment utiliser if pour créer un tableau GMSPlaceField nécessitant un désencapsulation conditionnel. Cela entraînera une erreur de compilation : "Initialiser 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ésenveloppement

L'instruction de l'exemple suivant montre l'utilisation de GMSPlaceField en tant que type non facultatif. Cela entraînera une erreur de compilation : "Impossible de forcer la valeur de désencapsulation 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 indiqué ci-dessous:

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