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

iOS के लिए Places SDK टूल के 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]