कारण आप अपने मूल त्रुटि प्राप्त है कि स्विफ्ट में, Array
एक सामान्य कंटेनर कि एक विशिष्ट प्रकार के मूल्यों को धारण करता है है। तो आपके पास Array<Int>
हो सकता है जिसमें पूर्णांक हो, या Array<String>
स्ट्रिंग्स रखे। लेकिन आपके पास सिर्फ Array
नहीं हो सकता है। सरणी में मौजूद चीज का प्रकार सामान्य पैरामीटर है, और स्विफ्ट शिकायत कर रहा है क्योंकि यह पता नहीं लगा सकता कि वह किस प्रकार का होना चाहिए। कभी-कभी यह उस प्रकार के कोड के संदर्भ से उस प्रकार का अनुमान लगा सकता है, लेकिन इस मामले में हमेशा नहीं।
आप बात आप भंडारण कर रहे हैं के प्रकार देकर समस्या का समाधान कर सकते हैं:
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array<Int> {
self.showDataLabel.text = toString(testCompositeArray)
}
}
इसके बजाय
Array<Int>
लिखने की
, आप छोटे रूप में लिख सकते हैं, [Int]
तुम भी समस्या का समाधान कर सकते हैं जैसा कि आपने पाया है NSArray
का उपयोग करके। Array
के विपरीत, NSArray
जेनिक्स का उपयोग नहीं करता है, क्योंकि यह उद्देश्य-सी में उत्पन्न होता है जिसमें स्विफ्ट के लिए एक अलग दृष्टिकोण होता है। इसके बजाए, NSArray
में केवल एक ही चीज है, AnyObject
। यह एक संदर्भ है जो किसी भी वर्ग के उदाहरणों को इंगित कर सकता है।
हालांकि, वहाँ NSArray
और AnyObject
का उपयोग कर, जो हर बार जब आप एक मूल्य उनमें शामिल उपयोग करते हैं, आप अक्सर एक असली बात करने के लिए मूल्य "डाली" करने के लिए, एक पूर्णांक या एक स्ट्रिंग की तरह है के लिए एक बड़ा नकारात्मक पहलू है। यह दर्द हो सकता है, और इससे भी बदतर, कभी-कभी त्रुटियों का कारण बन सकता है जब आप मानते हैं कि वास्तव में आपके पास एक और चीज है जब वास्तव में आपके पास दूसरा होता है। स्विफ्ट आमतौर पर आपको इस तरह की त्रुटियों से बचने के लिए प्रकारों के बारे में अधिक विशिष्ट होने के लिए प्रोत्साहित करता है।
स्रोत
2015-05-21 18:42:50
महान उत्तर, मुझे जेनेरिक की अवधारणा को समझने में मदद मिली ... अंत में! – DogCoffee