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

Places SDK for iOS के 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]