您收到原始错误的原因是,在Swift中,Array
是一个通用容器,其中包含特定类型的值.所以你可以用Array<Int>
来保存整数,或者用Array<String>
来保存字符串.但你不能只有Array
.数组包含的东西的类型是泛型参数,Swift抱怨说,因为它不知道该类型应该是什么.有时,它可以根据周围代码的上下文推断出该类型,但并非总是如此.
您可以通过提供存储对象的类型来解决问题:
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array<Int> {
self.showDataLabel.text = toString(testCompositeArray)
}
}
不用写Array<Int>
,你可以写[Int]
你也可以用NSArray
来解决这个问题,正如你所发现的.与Array
不同,NSArray
不使用泛型,因为它起源于Objective-C,后者对Swift有不同的方法.相反,NSArray
只包含一种东西,AnyObject
.这是一个可以指向任何类实例的引用.
然而,使用NSArray
和AnyObject
有一个很大的缺点,那就是每次使用它们包含的值时,通常必须将该值"转换"到真实的对象,如整数或字符串.这可能是一种痛苦,更糟糕的是,当你假设你有一种东西,而实际上你有另一种东西时,有时可能会导致错误.Swift通常鼓励您更具体地描述类型,以避免出现这样的错误.