वैकल्पिक बंधन
स्विफ्ट 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
यदि ब्लॉक निष्पादित नहीं करता है। यदि ऐसा नहीं है , तो यह कोड प्रकार (वैकल्पिक के बजाय ) नाम के एक नए चर को परिभाषित करता है ।booleanValue
nil
if
booleanValue
nil
booleanValue
Bool
Bool?
स्विफ्ट 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?
, आदि)।