无法指定类型的值' NSArray'类型为' [AnyObject]'

时间:2015-09-07 14:15:42

标签: ios swift

在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兼容如何摆脱上面的编译器错误?

3 个答案:

答案 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
希望这有助于某人。