2015-09-07 60 views
6

在迅疾,我有一個School類,它有[AnyObject]!不能鍵入「的NSArray」的值賦給類型爲「[AnyObject]」

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

我有一個實例類型的students屬性的值School,以及代表學生姓名的字符串NSArray。我想這個NSArray變量分配給students

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

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

爲什麼這個錯誤?是不是在快速兼容目標C中的NSArray數組?如何擺脫上面的編譯器錯誤?

+0

在聲明中使用實際類型允許編譯器強制執行通常是「好東西」的賦值。 – zaph

回答

6

您的var students是一個Swift數組,需要AnyObject類型的對象,但您可以將其指定爲NSArray。這兩個對象不屬於同一類型,並且不起作用。

但是,考慮到NSArray[AnyObject]兼容,可以使用簡單的類型轉換,使NSArray成斯威夫特陣列:

school.students = studentArray as [AnyObject] 

當然是一個更好的辦法是留在斯威夫特世界,如果可能的話,忘記NSArray,使getAllStudents返回一個Swift數組而不是NSArray。您不僅可以避免使用類型轉換,還可以從Swift集合中獲益。

2

聽起來school.students被定義爲可選,並可能是零,因此,如果您確信它不是零 - 通過使用第一解開它!

school.students as AnyObject! as NSArray 

OR

school.students! as NSArray 
0

我的方法寫在對象C其中返回類型的NSMutableArray「數據庫」

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

在迅速我癸LARE變量

var petListArray: NSMutableArray = [] 

保存在模型陣列

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

中的cellForRowAtIndexPath使用

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

希望這種幫助別人。

相關問題