在swift中,我有一个School
类,它的students
属性类型为[AnyObject]!
class School : NSObject {
var students: [AnyObject]!
...
}
我有一个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中,isn< ttt数组是否与NSArray兼容如何摆脱上面的编译器错误?
答案 0 :(得分:7)
你的var students
是一个Swift数组,并且期望AnyObject
类型的对象,但你尝试为它分配一个NSArray
。这两个对象的类型不同,不起作用。
但是,鉴于NSArray
与[AnyObject]
兼容,您可以使用简单的类型转换将NSArray
转换为Swift数组:
school.students = studentArray as [AnyObject]
当然,更好的方法是留在Swift世界并尽可能地忘记NSArray,方法是让getAllStudents
返回一个Swift数组而不是NSArray。您不仅可以避免进行类型转换,还可以从Swift系列的强大功能中受益。
答案 1 :(得分:2)
声音school.students
被定义为可选,因此如果您确定它不是零,则可能为零 - 首先使用!解包它!:
school.students as AnyObject! as NSArray
OR
school.students! as NSArray
答案 2 :(得分:0)
我在对象c中编写的方法返回类型"数据库"
的NSMutableArray -(NSMutableArray *)AllRowFromTableName:(NSString *)tableName;
在swift中,我将变量声明为
var petListArray: NSMutableArray = []
将模型数组保存为
self.petListArray = self.dataBase.AllRowFromTableName("InsuranceTable")
用于cellForRowAtIndexPath
let tempDBObject = self.petListArray[indexPath.row] as! Database
cell?.petName.text = tempDBObject.Hname
希望这有助于某人。