從 Places SDK for iOS 4.0.0 版開始,GMSPlaceField
類型現在使用 NS_OPTIONS
巨集。SDK 3.x 版將 GMSPlaceField
設為 NS_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]