वैकल्पिक बंधन
स्विफ्ट 3 और 4
var booleanValue : Bool? = false
if let booleanValue = booleanValue, booleanValue {
print("bound booleanValue: '\(booleanValue)'")
}
स्विफ्ट 2.2
var booleanValue : Bool? = false
if let booleanValue = booleanValue where booleanValue {
print("bound booleanValue: '\(booleanValue)'")
}
कोड let booleanValue = booleanValueरिटर्न है और falseयदि ब्लॉक निष्पादित नहीं करता है। यदि ऐसा नहीं है , तो यह कोड प्रकार (वैकल्पिक के बजाय ) नाम के एक नए चर को परिभाषित करता है ।booleanValuenilifbooleanValuenilbooleanValueBoolBool?
स्विफ्ट 3 और 4 कोड booleanValue(और स्विफ्ट 2.2 कोड where booleanValue) नए booleanValue: Boolचर का मूल्यांकन करता है। यदि यह सही है, तो ifब्लॉक booleanValue: Boolकार्यक्षेत्र में नए परिभाषित चर के साथ निष्पादित होता है ( ifब्लॉक के भीतर फिर से बाध्य मान को संदर्भित करने के लिए विकल्प की अनुमति देता है )।
नोट: यह एक स्विफ्ट कन्वेंशन है जो निरंतर स्थिरांक / वैरिएबल को वैसा ही नाम देता है जैसे वैकल्पिक स्थिरांक / चर let booleanValue = booleanValue। इस तकनीक को वेरिएबल शैडोइंग कहा जाता है । आप सम्मेलन से टूट सकते हैं और कुछ का उपयोग कर सकते हैं let unwrappedBooleanValue = booleanValue, unwrappedBooleanValue। मैं इसे समझने में मदद करने के लिए इंगित करता हूं कि क्या हो रहा है। मैं वैरिएबल शैडोइंग का उपयोग करने की सलाह देता हूं।
अन्य दृष्टिकोण
निल बँधना
इस विशिष्ट मामले के लिए निल coalescing स्पष्ट है
var booleanValue : Bool? = false
if booleanValue ?? false {
print("optional booleanValue: '\(booleanValue)'")
}
के लिए जाँच के falseरूप में स्पष्ट नहीं है
var booleanValue : Bool? = false
if !(booleanValue ?? false) {
print("optional booleanValue: '\(booleanValue)'")
}
नोट: if !booleanValue ?? falseसंकलन नहीं है।
बल अलिखित वैकल्पिक (से बचें)
फोर्स अनप्रॉपिंग से यह संभावना बढ़ जाती है कि कोई व्यक्ति भविष्य में एक बदलाव करेगा जो संकलित करता है लेकिन रनटाइम पर क्रैश होता है। इसलिए, मैं कुछ इस तरह से बचना होगा:
var booleanValue : Bool? = false
if booleanValue != nil && booleanValue! {
print("optional booleanValue: '\(booleanValue)'")
}
एक सामान्य दृष्टिकोण
हालांकि इस ढेर अतिप्रवाह सवाल पूछता है कि विशेष रूप से एक जांच करने का तरीका Bool?है trueएक के भीतर ifबयान, यह सही गलत या अन्य भाव के साथ unwrapped मूल्य के संयोजन के लिए जाँच करें कि क्या एक सामान्य दृष्टिकोण की पहचान करने के लिए उपयोगी है।
जैसा कि अभिव्यक्ति अधिक जटिल हो जाती है, मुझे वैकल्पिक बाध्यकारी दृष्टिकोण अधिक लचीला और अन्य दृष्टिकोणों की तुलना में समझने में आसान लगता है। नोट किसी भी वैकल्पिक प्रकार (के साथ कि वैकल्पिक बाध्यकारी काम करता है Int?, String?, आदि)।