以 NS_OPTIONS 身分遷移至 GMSPlaceField

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

從 Places SDK for iOS 4.0.0 版開始,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 做為非選用類型。這會導致編譯器錯誤 (「無法強制非選用 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]