从 Places SDK for iOS 4.0.0 版开始,GMSPlaceField
type 现在使用 NS_OPTIONS
宏。该 SDK 3.x 版本具有 GMSPlaceField
与 NS_ENUM
相同,并且仍然受支持。
如果您使用的是 Objective-C:这没有任何影响。您可以继续 像之前一样使用
GMSPlaceField
。如果您使用的是 Swift:如果您使用的是 Swift,则会中断您的实现 将
GMSPlaceField(rawValue:)
语法用作构造函数,而旧版本 作为可选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
用作非
可选类型。这会导致编译器错误(“无法强制解封值”
非可选类型 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]