एक वैकल्पिक या तो सेट है या नहीं-सेट (शून्य या शून्य नहीं) ... हमें एक महत्वपूर्ण निर्णय के साथ छोड़ रहा है। "हमें अपना कोड कैसे लिखना चाहिए ताकि यह दोनों राज्यों के लिए सही तरीके से काम कर सके?"। जिस तरह से हम वैकल्पिक को खोलते हैं वह वही है जो हमारे लिए तय करता है।
कई दृष्टिकोण हैं जो आप एक वैकल्पिक सेट का मुकाबला करने के लिए उपयोग कर सकते हैं।
- दुर्घटना!
- मान को किसी चीज़ में डिफ़ॉल्ट करें - यदि वह सेट नहीं था।
- सुंदर रूप से असफल रहें या कुछ भी न करें, लेकिन अगर मूल्य निर्धारित किया गया था, तो इसे असाइन करें।
- ग्रेसफुल फेल यानी कुछ भी न करें, हालांकि अगर मूल्य निर्धारित किया गया था ... कुछ करें (यह सिर्फ एक असाइनमेंट से अधिक है)।
नीचे 4 दृष्टिकोण हैं
यदि आपके पास कोई मान नहीं है, तो जबरन अपरिवर्तित उपयोग करना क्रैश हो जाएगा । आप ऐसा करना चाहते हैं यदि उस मूल्य का महत्वपूर्ण महत्व है जैसे कि फिल्म का शीर्षक (हर फिल्म का एक नाम होना चाहिए)। !
का उपयोग जबरन उतारने के लिए किया जाता है।
movieTitle = movie.title!
Nil coalescing का उपयोग एक और तरीका है जो आपको अधिक नियंत्रण प्रदान करेगा , जिसका अर्थ है कि यह दुर्घटनाग्रस्त नहीं होगा यदि मूल्य निर्धारित नहीं किया गया है, और न ही इसे 'कुछ भी सेट नहीं किया जाएगा' यदि यह सेट नहीं है ... तो यह वही होगा जो आप इसे बताएंगे ऐसा करने के लिए, अगर यह कोई नाम सेट नहीं था, तो इसे मूवी का नाम डिफ़ॉल्ट रूप से सेट किया जाएगा । ??
nil coalescing के लिए प्रयोग किया जाता है।
var movieTitle = movie.title ?? "untitled_Movie"
यदि आपके पास कोई मान नहीं है, तो वैकल्पिक चैनिंग का उपयोग करने से कुछ नहीं होगा और यदि आपके पास कोई मान है, तो मान सेट करेगा । आप ऐसा कुछ करते हैं कि आपके अभिनेता के एजेंट के नाम के लिए उसका मूल्य निर्धारित होना महत्वपूर्ण नहीं है । वैकल्पिक श्रृंखलन के लिए उपयोग किया जाता है।?
let agent = movie.leadActor?.agent
let agent = movie.leadActor!.agent
का उपयोग करते हुए if-let
(या guard
जिनमें से दो विभिन्न प्रकार हैं वैकल्पिक बाध्यकारी ) आप दे देंगे और अधिक नियंत्रण है, यह अगर मूल्य सेट नहीं है क्रैश नहीं करेंगे। यदि मान सेट है, तो आप कुछ कर सकते हैं। यदि यह सेट नहीं है तो आप एक else
बयान जोड़ सकते हैं ।
if let supportingActor = movie.supportingActor{
print(" The supporting actor is \(supportingActor)}
यह अलौकिकता का सबसे अधिक इस्तेमाल किया जाने वाला तरीका है, क्योंकि जबरन अलिखित करना कुछ हद तक हतोत्साहित करता है। इसे हतोत्साहित करने के बारे में अधिक चर्चा के लिए यहाँ देखें । के बीच एक अच्छी तुलना के लिए guard
और if-let
देखेंguard vs. if-let
पक्षीय लेख:
वैकल्पिक बाइंडिंग और वैकल्पिक श्रृंखलन आमतौर पर एक साथ उपयोग किए जाते हैं:
if let agent = movie.leadActor?.agent {
ContactInfo = agent.phoneNumber
}