इससे पहले कि मैं इम्प्लांटली अनवांटेड ऑप्शनल के लिए उपयोग के मामलों का वर्णन कर सकूं, आपको पहले से ही समझना चाहिए कि स्विफ्ट में क्या ऑप्शनल और इम्प्लांटली अनवांटेड ऑप्शनल हैं। यदि आप नहीं करते हैं, तो मैं आपको वैकल्पिक रूप से मेरा लेख पढ़ने की सलाह देता हूं
जब एक का उपयोग करने के लिए वैकल्पिक रूप से unwrapped वैकल्पिक
दो मुख्य कारण हैं कि एक इम्प्लांटली अनवांटेड वैकल्पिक का निर्माण करेगा। सभी को एक वैरिएबल को परिभाषित करने के साथ करना होगा जो कि तब कभी एक्सेस नहीं किया जाएगा nil
क्योंकि अन्यथा, स्विफ्ट कंपाइलर आपको एक वैकल्पिक रूप से स्पष्ट रूप से अनप्लग करने के लिए मजबूर करेगा।
1. एक निरंतर कि शुरुआत के दौरान परिभाषित नहीं किया जा सकता है
आरम्भिक समय पूरा होने तक हर सदस्य के पास एक मूल्य होना चाहिए। कभी-कभी, स्थिरीकरण को आरंभीकरण के दौरान इसके सही मूल्य के साथ आरंभ नहीं किया जा सकता है, लेकिन इसे एक्सेस किए जाने से पहले एक मूल्य होने की गारंटी दी जा सकती है।
एक वैकल्पिक चर का उपयोग इस मुद्दे के आसपास हो जाता है क्योंकि एक वैकल्पिक स्वचालित रूप से इसके साथ आरंभिक होता है nil
और इसमें अंत में जो मूल्य होता है वह अभी भी अपरिवर्तनीय होगा। हालाँकि, यह एक चर को लगातार अलग करने के लिए एक दर्द हो सकता है जिसे आप जानते हैं कि यह निश्चित नहीं है। अवैध रूप से अनवांटेड ऑप्शनल अतिरिक्त लाभ के साथ वैकल्पिक के रूप में एक ही लाभ प्राप्त करते हैं कि किसी को इसे हर जगह स्पष्ट रूप से खोलना नहीं पड़ता है।
इसका एक बड़ा उदाहरण यह है कि जब तक दृश्य लोड नहीं किया जाता है तब तक एक सदस्य चर को यूआईवीवाई उपवर्ग में आरंभ नहीं किया जा सकता है:
class MyView: UIView {
@IBOutlet var button: UIButton!
var buttonOriginalWidth: CGFloat!
override func awakeFromNib() {
self.buttonOriginalWidth = self.button.frame.size.width
}
}
यहां, आप बटन की मूल चौड़ाई की गणना तब तक नहीं कर सकते, जब तक कि दृश्य लोड न हो जाए, लेकिन आप जानते हैं कि awakeFromNib
दृश्य पर किसी अन्य विधि से पहले कॉल किया जाएगा (आरंभीकरण के अलावा)। मूल्य को अपनी कक्षा में स्पष्ट रूप से बिना सोचे समझे लागू करने के लिए मजबूर करने के बजाय, आप इसे अनप्लान्ड अनप्रेन्डेड वैकल्पिक के रूप में घोषित कर सकते हैं।
2. जब आपका ऐप एक परिवर्तनीय होने से पुनर्प्राप्त नहीं कर सकता है nil
यह अत्यंत दुर्लभ होना चाहिए, लेकिन यदि कोई चर nil
एक्सेस होने पर आपका ऐप चलना जारी नहीं रख सकता है, तो इसके परीक्षण के लिए परेशान करना समय की बर्बादी होगी nil
। आम तौर पर यदि आपके पास एक ऐसी स्थिति है जो आपके ऐप को चालू रखने के लिए बिल्कुल सही होनी चाहिए, तो आप इसका उपयोग करेंगे assert
। एक अनप्लग्ड अनवैप्ड ऑप्शनल में नील के लिए एक मुखर का निर्माण किया गया है। फिर भी, वैकल्पिक को खोलना और शून्य होने पर अधिक वर्णनात्मक मुखर का उपयोग करना अक्सर अच्छा होता है।
जब एक का उपयोग नहीं करने के लिए अवैध रूप से वैकल्पिक खोल दिया
1. लज़ीज़ परिकलित सदस्य चर
कभी-कभी आपके पास एक सदस्य चर होता है जिसे कभी भी शून्य नहीं होना चाहिए, लेकिन इसे आरंभीकरण के दौरान सही मान पर सेट नहीं किया जा सकता है। एक समाधान के लिए एक अनप्लग्ड अनवाप्लेटेड वैकल्पिक का उपयोग करना है, लेकिन एक बेहतर तरीका एक आलसी चर का उपयोग करना है:
class FileSystemItem {
}
class Directory : FileSystemItem {
lazy var contents : [FileSystemItem] = {
var loadedContents = [FileSystemItem]()
// load contents and append to loadedContents
return loadedContents
}()
}
अब, सदस्य चर contents
को तब तक इनिशियलाइज़ नहीं किया जाता है जब तक वह पहली बार एक्सेस नहीं हो जाता है। इससे वर्ग को प्रारंभिक मूल्य की गणना करने से पहले सही स्थिति में आने का मौका मिलता है।
नोट: यह ऊपर से # 1 विरोधाभास लग सकता है। हालाँकि, एक महत्वपूर्ण अंतर है। buttonOriginalWidth
ऊपर बदलने से पहले संपत्ति पर पहुंचने पर बटन चौड़ाई किसी को रोकने के लिए viewDidLoad के दौरान सेट किया जाना चाहिए।
2. हर जगह एल्स
अधिकांश भाग के लिए, अनप्लग किए गए अनवांटेड ऑप्शनल को टाला जाना चाहिए क्योंकि यदि गलती से उपयोग किया जाता है, तो यह एक्सेस करते समय आपका पूरा ऐप क्रैश हो जाएगा nil
। यदि आप कभी इस बारे में निश्चित नहीं हैं कि क्या एक चर शून्य हो सकता है, हमेशा एक सामान्य वैकल्पिक का उपयोग करने के लिए डिफ़ॉल्ट। एक चर है कि nil
निश्चित रूप से कभी नहीं होता है बहुत ज्यादा चोट नहीं करता है।
if someOptional
।