जवाबों:
assertपरीक्षण के दौरान पवित्रता की जाँच के लिए है, जबकि preconditionउन चीजों से रक्षा करने के लिए है, यदि वे होते हैं, तो इसका मतलब होगा कि आपका कार्यक्रम सिर्फ यथोचित रूप से आगे नहीं बढ़ सकता है।
इसलिए, उदाहरण के लिए, assertयदि आप बग है, तो जल्दी से खोजने के लिए आप कुछ गणना समझदार परिणामों (कुछ सीमा के भीतर) पर रख सकते हैं । लेकिन आप इसके साथ शिप नहीं करना चाहेंगे, क्योंकि आउट-ऑफ-बाउंड परिणाम मान्य हो सकता है, और महत्वपूर्ण नहीं है इसलिए आपके ऐप को क्रैश नहीं करना चाहिए (मान लीजिए कि आप इसका उपयोग प्रगति पट्टी में प्रगति प्रदर्शित करने के लिए कर रहे थे)।
दूसरी ओर, यह जांचना कि किसी तत्व को लाने पर किसी सरणी पर एक सबस्क्रिप्ट मान्य है precondition। किसी अमान्य सबस्क्रिप्ट के लिए पूछे जाने पर सरणी ऑब्जेक्ट के लिए कोई उचित अगली कार्रवाई नहीं है, क्योंकि इसे एक गैर-वैकल्पिक मान वापस करना होगा ।
डॉक्स से पूर्ण पाठ (विकल्प पर क्लिक करें assertऔर preconditionXcode में):
शर्त लगाना
आगे की प्रगति करने के लिए एक आवश्यक शर्त की जाँच करें।
इस फ़ंक्शन का उपयोग उन परिस्थितियों का पता लगाने के लिए करें जो प्रोग्राम को शिपिंग कोड में भी आगे बढ़ने से रोकना चाहिए।
खेल के मैदानों और -ऑन बिल्ड में (Xcode के डिबग कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट): यदि
conditionमुद्रण के बाद डीबग करने योग्य स्थिति में गलत, प्रोग्राम निष्पादन को रोकेंmessage।In -O बनाता है (Xcode की रिलीज़ कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट): यदि
conditionगलत का मूल्यांकन करता है, तो प्रोग्राम निष्पादन रोकें।In -unchecked बनाता है,
conditionका मूल्यांकन नहीं किया जाता है, लेकिन ऑप्टिमाइज़र मान सकता है कि यह मूल्यांकन करेगाtrue। उस धारणा को संतुष्ट करने में विफलता-अनियंत्रित बिल्ड एक गंभीर प्रोग्रामिंग त्रुटि है।
ज़ोर
एक वैकल्पिक संदेश के साथ पारंपरिक सी-शैली मुखर।
आंतरिक स्वच्छता जांच के लिए इस फ़ंक्शन का उपयोग करें जो परीक्षण के दौरान सक्रिय हैं लेकिन शिपिंग कोड के प्रदर्शन को प्रभावित नहीं करते हैं। रिलीज़ बिल्ड में अमान्य उपयोग की जांच करने के लिए; देखते हैं
precondition।
खेल के मैदानों और -ऑन बिल्ड में (Xcode के डिबग कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट): यदि
conditionमुद्रण के बाद डीबग करने योग्य स्थिति में गलत, प्रोग्राम निष्पादन को रोकेंmessage।In -O बनाता है (Xcode की रिलीज़ कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट),
conditionमूल्यांकन नहीं किया गया है, और कोई प्रभाव नहीं हैं।In -unchecked बनाता है,
conditionका मूल्यांकन नहीं किया जाता है, लेकिन ऑप्टिमाइज़र मान सकता है कि यह मूल्यांकन करेगाtrue। उस धारणा को संतुष्ट करने में विफलता-अनियंत्रित बिल्ड एक गंभीर प्रोग्रामिंग त्रुटि है।
data["name"]मौजूद नहीं है, लेकिन यह होना चाहिए। पहरेदार के अंदर मुखर होने से..से {} मुझे दुर्घटनाग्रस्त करके और समस्या को लाकर मेरी त्रुटि को पकड़ने में मदद करेगा। इसी तरह, यदि यह कोड उत्पादन में था, तो अभिकर्ता प्रोग्राम को क्रैश नहीं करेगा, और जो भी बैकअप कोड मैंने इस्तेमाल किया है ( return nil) उसे संभाल लेगा।
मैंने पाया स्विफ्ट मुखर - उपयोगी होने के लिए लापता मैनुअल
debug release release
function -Onone -O -Ounchecked
assert() YES NO NO
assertionFailure() YES NO NO**
precondition() YES YES NO
preconditionFailure() YES YES YES**
fatalError()* YES YES YES
और स्विफ्ट इवोल्यूशन पर दिलचस्प चर्चा से
- जोर: आंतरिक त्रुटियों के लिए अपने स्वयं के कोड की जाँच
- पूर्व शर्त: यह जाँचने के लिए कि आपके ग्राहकों ने आपको मान्य तर्क दिए हैं।
इसके अलावा, आपको इस बात पर सावधानी बरतने की ज़रूरत है कि क्या उपयोग किया जाए, इसके लिए जोर-शोर और अनुकूलन स्तर देखें
precondition()और एक ही व्यवहार करpreconditionFailure() रहे हैं । इन कार्यों के बीच का अंतर है: अंदर एक शर्त की जरूरत है, जबकि सिर्फ बाहर फेंकना है। preconditionpreconditionFailure
preconditionताकि आप को रिलीज़ मोड में सक्रिय होता है जब आप अपने अनुप्रयोग जहाज और पूर्व शर्त विफल रही एप्लिकेशन को समाप्त कर देगा।
Assertडिफ़ॉल्ट रूप में डिबग मोड में काम करता है।
NSHipster पर इसका उपयोग करने पर मुझे यह बहुत अच्छा लगा।
निबंध शास्त्रीय तर्क से उधार ली गई अवधारणा है। तर्क में, दावे एक सबूत के भीतर प्रस्तावों के बारे में बयान हैं। प्रोग्रामिंग में, मान्यताओं का अनुमान है कि प्रोग्रामर ने उस स्थान पर आवेदन के बारे में कहा है जहां उन्हें घोषित किया गया है।
जब पूर्व शर्त और पोस्टकंडिशन की क्षमता में उपयोग किया जाता है, जो किसी विधि या फ़ंक्शन के निष्पादन की शुरुआत और अंत में कोड की स्थिति के बारे में अपेक्षाओं का वर्णन करता है, तो अभिकथन एक अनुबंध बनाते हैं। कुछ पूर्व शर्त विफल होने पर निष्पादन को रोकने के लिए, रन-टाइम पर शर्तों को लागू करने के लिए भी उपयोग किया जा सकता है।
शर्त लगाना
func precondition(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
आगे की प्रगति करने के लिए एक आवश्यक शर्त की जाँच करें।
ज़ोर
func assert(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
एक वैकल्पिक संदेश के साथ पारंपरिक सी-शैली मुखर।
आंतरिक स्वच्छता जांच के लिए इस फ़ंक्शन का उपयोग करें जो परीक्षण के दौरान सक्रिय हैं लेकिन शिपिंग कोड के प्रदर्शन को प्रभावित नहीं करते हैं। रिलीज़ बिल्ड में अमान्य उपयोग की जांच करने के लिए; पूर्वदर्शन देखें।
खेल के मैदानों में और -ऑन बिल्ड (Xcode के डिबग कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट): यदि स्थिति झूठी का मूल्यांकन करती है, तो मुद्रण संदेश के बाद डीबग करने योग्य स्थिति में प्रोग्राम निष्पादन रोकें।
बस मैं अपने 2 सेंट जोड़ना चाहता था। आप अपने कोड में जितने चाहें उतने जोड़ सकते हैं। आप इन कयासों के साथ अपना कोड शिप कर सकते हैं। स्विफ्ट उत्पादन कोड के लिए इन कोड ब्लॉक का मूल्यांकन नहीं करता है। इनका मूल्यांकन केवल डिबग मोड के मामले में किया जाता है।
इसके अलावा स्विफ्ट.ओआरजी से इमेज अटैच करना
यह भी ध्यान दें, यह पूर्व शर्त के साथ मामला नहीं है। पूर्व शर्त के साथ भेज दिया गया कोड क्रैश हो जाएगा और अगर पूर्वसूचना का सही मूल्यांकन नहीं किया जाता है तो ऐप समाप्त हो जाएगा।
तो संक्षेप में, बहस डिबगिंग के लिए है, लेकिन उत्पादन को प्रभावित किए बिना भेज दिया जा सकता है। अभिकथन का मूल्यांकन डिबग मोड में किया जाएगा लेकिन उत्पादन में नहीं।
तथा
PreConditions सुनिश्चित करने के लिए हैं कि अप्रत्याशित चीजें उत्पादन पर्यावरण पर नहीं होती हैं। उन स्थितियों का मूल्यांकन किया जाता है और झूठे होने के लिए उनका मूल्यांकन करने पर आपके ऐप को समाप्त कर दिया जाएगा