2014-09-26 9 views
15

क्या इन दोनों कोड के टुकड़े के बीच का अंतर है:स्विफ्ट में डाउनकास्टिंग के साथ-साथ?

let cell = tableView.dequeueReusableCellWithIdentifier("cellId") as UITableViewCell? 
// vs 
let cell = tableView.dequeueReusableCellWithIdentifier("cellId") as? UITableViewCell 

परिणाम बिल्कुल वैसा ही नहीं है?

+0

'UITableViewCell के रूप में? 'परिणाम स्विफ्ट 2' AnyObject में संकलन त्रुटि में परिणाम? UITableViewCell में परिवर्तनीय नहीं है? ' – onmyway133

उत्तर

14

वहाँ कोई अंतर नहीं है कि कोड में, दोनों ही मामलों में यह मूल्यांकन करता UITableViewCell?

को वास्तविक अंतर है:

  • पहला मामला UITableViewCell? करने के लिए एक खिन्न में

    हमेशा सफल होने की उम्मीद है (भले ही यह शून्य है), इसलिए dequeueReusableCellWithIdentifier ऐसा कुछ देता है जो UITableViewCell (या इससे प्राप्त विरासत का एक उदाहरण) का उदाहरण नहीं है, तो यह रनटाइम पर विफल रहता है। अभिव्यक्ति देता है एक वैकल्पिक UITableViewCell?

  • दूसरे मामले में

    डाली वैकल्पिक है: यदि वस्तु dequeueReusableCellWithIdentifier द्वारा वापस न UITableViewCell का एक उदाहरण है और न ही एक उपवर्ग का एक उदाहरण है, खिन्न शान से शून्य करने के लिए इसलिए कोई क्रम के साथ मूल्यांकन करता है (त्रुटि)।

पाठ्यक्रम dequeueReusableCellWithIdentifier के

हमेशा एक UITableViewCell देता है, यही कारण है कि वहाँ अपने कोड में कोई अंतर नहीं है। लेकिन अन्य संदर्भों में अंतर मौजूद हो सकता है और आप उस की देखभाल करने के क्रम त्रुटियों

+1

+1 इस तरह के विस्तृत तरीके से समझाए जाने के लिए। –

6

as और as? के बीच मुख्य अंतर यह है कि as डाली मजबूर किया जाता है और दुर्घटना जाएगा अगर असफल होता है को रोकने के लिए किया है। as? कास्ट वैकल्पिक होने पर वैकल्पिक मान मूल्य लौटाएगा और असफल होने पर nil होगा।

+0

क्या इसका मतलब यह है कि 'as' और' as! 'समान हैं? –

+0

@ BR41N-FCK यह थोड़ा बदल गया है, स्विफ्ट 2.0 'में' केवल तभी मान्य है जब विफलता का कोई मौका न हो (यदि आप अनुमति नहीं देते हैं तो आप संकलन समय त्रुटि प्राप्त करेंगे)। 'as!' को मजबूर कास्टिंग कहा जाता है और अगर रनटाइम पर कास्ट संभव नहीं है तो क्रैश हो जाएगा। – Kirsteins

+0

क्या उनके बीच बारीकियों को बेहतर समझने के लिए तीनों की तुलना है? –

1

  • as? UITableViewCell का मतलब है जब आप क्या तुम downcasting रहे हैं, आप मानते हैं पता नहीं है के बीच, as और as? अंतर यह है कि एक UITableViewCell के रूप में है, लेकिन यह हो सकता है मुझे Integer या Float या Array या Dictionary

  • as UITableViewCell? मतलब है कि यह एक Optional Value है, यह या तो एक UITableViewCell या Nil मूल्य हो सकती है।

संबंधित मुद्दे