À 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 queGMSPlaceField?
facultatif. Les versions 4.0.0 et ultérieures renvoient une valeurGMSPlaceField
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émentsGMSPlaceField
.
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]