无法将类型'NSArray'的值分配给类型'[AnyObject]'的值

use*_*225 6 ios swift

在swift中,我有一个School类,它有一个students类型的属性[AnyObject]!

class School : NSObject {
  var students: [AnyObject]!
  ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个实例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
Run Code Online (Sandbox Code Playgroud)

为什么这个错误?是不是swift中的数组与目标c中的NSArray兼容?如何摆脱上面的编译器错误?

aya*_*aio 7

你的var students是一个Swift数组,并期望对象的类型AnyObject,但你尝试分配它NSArray.这两个对象的类型不同,不起作用.

但是,鉴于它NSArray兼容[AnyObject],您可以使用简单的类型转换来NSArray进入Swift数组:

school.students = studentArray as [AnyObject]
Run Code Online (Sandbox Code Playgroud)

当然,更好的方法是留在Swift世界并尽可能地忘记NSArray,方法是getAllStudents返回一个Swift数组而不是NSArray.您不仅可以避免必须进行类型转换,还可以从Swift集合的强大功能中受益.