以 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 陣列,這需要有條件地解除包裝。這會導致編譯器錯誤 (「Initializer for conditional binding must have Optional type, not 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 unwrap 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]