ios - [AnyObject] के मान को सब्सक्राइब नहीं कर सकता? इंटेल की एक इंडेक्स के साथ




xcode swift (4)

यह PFQueryTableViewController विस्तारित करने PFQueryTableViewController कक्षा में है और मुझे निम्न त्रुटि मिल रही है। पंक्तियां केवल PFUser ही PFUser
मैं इसे क्यों नहीं डाल सकता? क्या इसके चारों ओर एक रास्ता है?

त्रुटि है:

Cannot subscript a value of [AnyObject]? with an index of type Int

... इस लाइन के लिए:

var user2 = self.objects[indexPath.row] as! PFUser


बस एक जोड़ें! (विस्मयादिबोधक चिह्न) वस्तुओं के बाद, जैसे:

var user2 = self.objects![indexPath.row] as! PFUser

उसने मेरे लिए इसे हल कर दिया :)


मुझे निम्नलिखित पंक्ति के साथ एक ही समस्या थी:

array![row]

मैं समझ नहीं पाया कि मुद्दा कहां से आया था; यदि मैंने row को प्रतिस्थापित किया है जैसे कोड को संकलित किया गया है और बिना किसी समस्या के भाग गया है।

तब मुझे इसे बदलने का अच्छा विचार था:

array![Int(row)]

और यह काम किया। मेरे जीवन के लिए, मुझे समझ में नहीं आ रहा है कि क्यों सरणी देना -1 का सूचकांक सैद्धांतिक रूप से कानूनी है, लेकिन वहां आप जाते हैं। सब्सक्रिप्शन के लिए हस्ताक्षर किए जाने के लिए यह मुझे समझ में आता है, लेकिन शायद यह सिर्फ मुझे है; मुझे इसके बारे में Chris से पूछना होगा।


मैं एक ही मुद्दे में भाग गया और इसे इस तरह हल किया:

let scope : String = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] as! String

आपके मामले के लिए, आप ऐसा कर सकते हैं:

var user2 : PFUser = self.objects![indexPath.row] as! PFUser

समस्या कास्ट नहीं है, लेकिन तथ्य यह है कि self.objects एक वैकल्पिक सरणी प्रतीत होता है: [AnyObject]?
इसलिए, यदि आप एक सबस्क्रिप्ट के माध्यम से अपने किसी एक मान को एक्सेस करना चाहते हैं, तो आपको पहले सरणी को अनदेखा करना होगा:

var user2: PFUser
if let userObject = self.objects?[indexPath.row] {
    user2 = userObject as! PFUser
} else {
    //handle the case of 'self.objects' being 'nil'
}

self.objects?[indexPath.row] पहले self.objects को वैकल्पिक चेनिंग का उपयोग करता है, और उसके बाद इसे सबस्क्रिप्ट कहते हैं।

स्विफ्ट 2 के रूप में, आप गार्ड स्टेटमेंट का भी उपयोग कर सकते हैं:

var user2: PFUser
guard let userObject = self.objects?[indexPath.row] else {
    //handle the case of 'self.objects' being 'nil' and exit the current scope
}
user2 = userObject as! PFUser