Swift 无法推断泛型参数的参数
我试图用NSUserDefaults保存一个数组,然后加载该数组,但我得到错误“无法推断泛型参数的参数”。我有什么做错了吗?在swift中似乎没有人遇到这个问题,所以我找不到任何解决方案Swift 无法推断泛型参数的参数,swift,nsuserdefaults,loaddata,Swift,Nsuserdefaults,Loaddata,我试图用NSUserDefaults保存一个数组,然后加载该数组,但我得到错误“无法推断泛型参数的参数”。我有什么做错了吗?在swift中似乎没有人遇到这个问题,所以我找不到任何解决方案 IBAction func loadData(sender: AnyObject) { if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array { self.show
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array {
self.showDataLabel.text = defaults.objectForKey("testScoreSATArray") as Array
}
}
您收到原始错误的原因是,在Swift中,
Array
是一个通用容器,它保存特定类型的值。因此,您可以有一个保存整数的数组
,或者一个保存字符串的数组
。但是你不能只有一个数组。数组包含的对象的类型是泛型参数,Swift对此表示不满,因为它无法确定该类型应该是什么。有时,它可以根据周围代码的上下文推断出该类型,但并非总是如此
您可以通过提供存储对象的类型来解决问题:
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array<Int> {
self.showDataLabel.text = toString(testCompositeArray)
}
}
iAction func loadData(发送方:AnyObject){
如果让testCompositeArray=defaults.objectForKey(“testscorestarray”)作为数组{
self.showDataLabel.text=toString(TestCompositeArlay)
}
}
您可以编写较短的格式,[Int]
您还可以使用NSArray
解决此问题,如您所发现的。与Array
不同,NSArray
不使用泛型,因为它起源于Objective-C,而Objective-C对Swift有不同的方法。相反,NSArray
只保存一种东西,AnyObject
。这是一个可以指向任何类实例的引用
但是,使用NSArray
和AnyObject
有一个很大的缺点,即每次使用它们包含的值时,通常都必须将该值“转换”为真实值,如整数或字符串。这可能是一种痛苦,更糟糕的是,当你假设你有一种东西而实际上你有另一种东西时,有时会导致错误。Swift通常鼓励您更具体地描述类型,以避免类似的错误。很好的答案,帮助我掌握了泛型的概念。。。最后