GMSPlaceField को NS_OPTIONS में माइग्रेट करना

iOS के लिए Places SDK के 4.0.0 वर्शन से, GMSPlaceField टाइप अब NS_OPTIONS मैक्रो का इस्तेमाल करता है. SDK के 3.x वर्शन में GMSPlaceField को NS_ENUM के तौर पर इस्तेमाल किया जाता है. ये वर्शन अब भी काम करते हैं.

  • अगर Objective-C का इस्तेमाल किया जा रहा है: तो कोई असर नहीं पड़ेगा. GMSPlaceField का इस्तेमाल पहले की तरह जारी रखा जा सकता है.

  • अगर Swift का इस्तेमाल किया जा रहा है, तो: अगर कंस्ट्रक्टर के तौर पर GMSPlaceField(rawValue:) सिंटैक्स का इस्तेमाल किया जा रहा है, तो आपका कोड काम नहीं करेगा. एसडीके के पुराने वर्शन, इसे वैकल्पिक 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]