作为 NS_OPTIONS 迁移到 GMSPlaceField

从 4.0.0 版 Places SDK for iOS 开始,GMSPlaceField 类型现在使用 NS_OPTIONS 宏。SDK 3.x 版本的 GMSPlaceFieldNS_ENUM,但仍受支持。

  • 如果您使用的是 Objective-C:这没有任何影响。您可以像以前一样继续使用 GMSPlaceField

  • 如果您使用的是 Swift:如果您使用 GMSPlaceField(rawValue:) 语法作为构造函数,则旧版 SDK 会以可选 GMSPlaceField? 的形式返回。4.0.0 及更高版本返回一个非可选的 GMSPlaceField 值;对可选操作执行的任何操作(例如条件检查或强制解封)都将失败。此外,您现在还可以使用数组语法来组合 GMSPlaceField

迁移代码

某些条件解封或强制解封语法在 Swift 中会断开。以下示例展示了如何解决这些问题,还演示了如何使用数组语法来声明 GMSPlaceField

有条件地解封

以下示例中的语句展示了如何使用 if 创建需要条件解封的 GMSPlaceField 数组。这会导致编译器错误(“用于条件绑定的初始化函数必须具有可选类型,而不是 GMSPlaceField”)。

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

如需解决此问题,请移除 if 语句,如下所示:

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

您也可以使用数组语法,如下所示:

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

强制解封

以下示例中的语句展示了如何使用 GMSPlaceField 作为非可选类型。这会导致编译器错误(“Cannot force value of non-optional type GMSPlaceField.”):

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

如需解决此问题,请使用 GMSPlaceField 作为可选类型,如下所示:

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

您也可以使用数组语法,如下所示:

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