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

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

  • अगर ऑब्जेक्ट सी का इस्तेमाल किया जा रहा है, तो इसका कोई असर नहीं पड़ेगा. आप पहले की तरह GMSPlaceField का इस्तेमाल करना जारी रख सकते हैं.

  • अगर Swift का इस्तेमाल किया जा रहा है: अगर आपने कंस्ट्रक्टर के तौर पर GMSPlaceField(rawValue:) सिंटैक्स का इस्तेमाल किया है, तो SDK टूल के पुराने वर्शन, वैकल्पिक GMSPlaceField? के तौर पर दिखाए जाते हैं. ऐसे में, आपका लागू करने का तरीका टूट जाएगा. वर्शन 4.0.0 और उसके बाद वाले वर्शन में GMSPlaceField वैल्यू दिखती है, जो ज़रूरी नहीं है. हालांकि, विकल्प के तौर पर की गई कोई भी कार्रवाई, फ़ेल हो जाएगी. जैसे, शर्तों के साथ की जाने वाली जांच या फ़ोर्स अनरैप करना. इसके अलावा, GMSPlaceField को आपस में जोड़ने के लिए अब आपके पास ऐरे सिंटैक्स का इस्तेमाल करने का भी विकल्प है

आपका कोड माइग्रेट किया जा रहा है

Swift में कुछ कंडीशनल अनरैपिंग या ज़बरदस्ती अनरैप करने वाले सिंटैक्स ब्रेक हो जाएंगे. यहां दिए गए उदाहरणों में, इन समस्याओं को ठीक करने का तरीका बताया गया है. साथ ही, GMSPlaceField का एलान करने के लिए ऐरे सिंटैक्स का इस्तेमाल करने के बारे में भी बताया गया है:

कंडिशनल अनरैप करना

नीचे दिए गए उदाहरण में स्टेटमेंट में दिखाया गया है कि GMSPlaceField अरे बनाने के लिए, if का इस्तेमाल किया जाता है. इस कलेक्शन को शर्त के साथ खोलने की ज़रूरत होती है. इससे कंपाइलर की गड़बड़ी होगी ("कंडिशनल बाइंडिंग के लिए शुरू करने वाले टूल में वैकल्पिक टाइप होना चाहिए, 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]