2015-09-07 13 views
6

तेज में, मैं है एक School वर्ग, यह प्रकार का एक students संपत्ति [AnyObject]!प्रकार के '[AnyObject]'

class School : NSObject { 
    var students: [AnyObject]! 
    ... 
} 

मैं एक उदाहरण मिल गया है एक मूल्य के प्रकार 'NSArray' का मान निर्दिष्ट नहीं किया जा सकता School, और छात्रों के नामों का प्रतिनिधित्व करने वाली स्ट्रिंग के NSArray। मैं students को यह NSArray चर प्रदान करना चाहते हैं:

var school = School() 
var studentArray : NSArray = getAllStudents() 

//ERROR:Cannot assign a value of type 'NSArray' to a value of type '[AnyObject]' 
school.students = studentArray 

क्यों इस त्रुटि? उद्देश्य सी में NSArray के साथ तेजी से संगत में सरणी नहीं है ??? उपरोक्त कंपाइलर त्रुटि से छुटकारा पाने के लिए कैसे?

+0

घोषणा में वास्तविक प्रकार का उपयोग करने से संकलक को असाइनमेंट को लागू करने की अनुमति मिलती है जो आमतौर पर "अच्छी चीज़" होती है। – zaph

उत्तर

6

आपकी var students एक स्विफ्ट सरणी है और AnyObject टाइप करने की अपेक्षा करता है, लेकिन आप इसे NSArray असाइन करने का प्रयास करते हैं। दो वस्तुएं एक ही प्रकार के नहीं हैं और यह काम नहीं करती है।

लेकिन, वह NSArray दिया [AnyObject] के साथ संगत है, आप सरल typecasting का प्रयोग कर एक स्विफ्ट सरणी में NSArray बनाने के लिए कर सकते हैं:

school.students = studentArray as [AnyObject] 
बेशक

एक बेहतर दृष्टिकोण स्विफ्ट दुनिया में और करने के लिए रहने के लिए होगा यदि संभव हो तो एनएसएआरएआरई को भूल जाएं, getAllStudents को एनएसएआरएआरई के बजाय एक स्विफ्ट सरणी लौटाएं। न केवल आप टाइपकास्ट करने से बचेंगे बल्कि आपको स्विफ्ट संग्रह की शक्ति से भी फायदा होगा।

2

ध्वनि school.students की तरह वैकल्पिक के रूप में परिभाषित किया गया है और नहीं के बराबर इसलिए यदि आप सुनिश्चित करें कि अपनी नहीं के बराबर हैं हो सकता है - यह पहली बार खोलने का उपयोग करके:

school.students as AnyObject! as NSArray 

या

school.students! as NSArray 
0

मेरे विधि लिखा ऑब्जेक्ट सी में जो "डेटाबेस"

-(NSMutableArray *)AllRowFromTableName:(NSString *)tableName; 

स्विफ्ट I dec में एनएसएमयूटेबलएरे को वापस लौटाता है के रूप में मॉडल सरणी में

var petListArray: NSMutableArray = [] 

सहेजें के रूप में

self.petListArray = self.dataBase.AllRowFromTableName("InsuranceTable") 

lare चर cellForRowAtIndexPath में प्रयुक्त

let tempDBObject = self.petListArray[indexPath.row] as! Database 
cell?.petName.text = tempDBObject.Hname 

आशा है कि यह मदद किसी को।

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