इस लेख को पढ़कर मैंने गार्ड के उपयोग से बहुत लाभ देखा
यहाँ आप एक उदाहरण के साथ गार्ड के उपयोग की तुलना कर सकते हैं:
यह बिना गार्ड वाला हिस्सा है:
func fooBinding(x: Int?) {
if let x = x where x > 0 {
// Do stuff with x
x.description
}
// Value requirements not met, do something
}
यहां आप सभी शर्तों के भीतर अपना वांछित कोड डाल रहे हैं
हो सकता है कि आपको तुरंत इसके साथ कोई समस्या दिखाई न दे, लेकिन आप कल्पना कर सकते हैं कि यह भ्रम पैदा कर सकता है कि क्या यह कई शर्तों के साथ नेस्टेड था, जो आपके बयानों को चलाने से पहले सभी को पूरा करने की आवश्यकता थी
इसे साफ करने का तरीका यह है कि आप अपने प्रत्येक चेक को पहले करें, और यदि कोई मिले तो उससे बाहर निकलें। इससे यह समझने में आसानी होती है कि कौन सी स्थितियां इस फ़ंक्शन से बाहर निकलेंगी।
लेकिन अब हम गार्ड का उपयोग कर सकते हैं और हम देख सकते हैं कि कुछ मुद्दों को हल करना संभव है:
func fooGuard(x: Int?) {
guard let x = x where x > 0 else {
// Value requirements not met, do something
return
}
// Do stuff with x
x.description
}
- अपनी मनचाही शर्त के लिए जाँच करना, न कि आप जो चाहते हैं। यह फिर से एक मुखर के समान है। यदि शर्त पूरी नहीं होती है, तो गार्ड का दूसरा बयान चलाया जाता है, जो फ़ंक्शन से बाहर हो जाता है।
- यदि स्थिति गुजरती है, तो यहां वैकल्पिक वैरिएबल स्वचालित रूप से आपके लिए उस दायरे के भीतर अपरिवर्तित रहता है जिसे गार्ड स्टेटमेंट कहा जाता था - इस मामले में, फूगार्ड (_ :) फ़ंक्शन।
- आप जल्दी खराब मामलों की जाँच कर रहे हैं, जिससे आपका कार्य अधिक पठनीय और बनाए रखने में आसान हो जाता है
यह समान पैटर्न गैर-वैकल्पिक मानों के लिए भी सही है:
func fooNonOptionalGood(x: Int) {
guard x > 0 else {
// Value requirements not met, do something
return
}
// Do stuff with x
}
func fooNonOptionalBad(x: Int) {
if x <= 0 {
// Value requirements not met, do something
return
}
// Do stuff with x
}
यदि आपके पास अभी भी कोई प्रश्न है तो आप पूरे लेख को पढ़ सकते हैं: स्विफ्ट गार्ड स्टेटमेंट।
समेट रहा हु
और अंत में, पढ़ने और परीक्षण में मैंने पाया कि यदि आप किसी वैकल्पिक को खोलने के लिए गार्ड का उपयोग करते हैं,
उन अपरिवर्तित मूल्य आपके आसपास के कोड ब्लॉक के बाकी हिस्सों में उपयोग करने के लिए आपके पास रहते हैं
।
guard let unwrappedName = userName else {
return
}
print("Your username is \(unwrappedName)")
यहां अनरैप्ड वैल्यू केवल अगर ब्लॉक के अंदर उपलब्ध होगी
if let unwrappedName = userName {
print("Your username is \(unwrappedName)")
} else {
return
}
// this won't work – unwrappedName doesn't exist here!
print("Your username is \(unwrappedName)")