无法推断通用参数的参数
argument for generic parameter could not be inferred
我试图用 NSUserDefaults 保存一个数组,然后加载该数组,但我收到错误 "argument for generic parameter could not be inferred."我有什么地方做错了吗? swift 似乎没有人遇到这个问题,所以我找不到任何解决方案。
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array {
self.showDataLabel.text = defaults.objectForKey("testScoreSATArray") as Array
}
}
您收到原始错误的原因是,在 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
。这是一个可以指向任何 class.
实例的引用
然而,使用 NSArray
和 AnyObject
有一个很大的缺点,那就是每次你使用它们包含的值时,你通常必须将值“转换”为真实的东西,如整数或字符串。这可能会很痛苦,更糟糕的是,当您假设您拥有一种东西而实际上您拥有另一种东西时,有时会导致错误。 Swift 通常鼓励您对类型进行更具体的说明,以避免出现此类错误。
我试图用 NSUserDefaults 保存一个数组,然后加载该数组,但我收到错误 "argument for generic parameter could not be inferred."我有什么地方做错了吗? swift 似乎没有人遇到这个问题,所以我找不到任何解决方案。
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array {
self.showDataLabel.text = defaults.objectForKey("testScoreSATArray") as Array
}
}
您收到原始错误的原因是,在 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
。这是一个可以指向任何 class.
然而,使用 NSArray
和 AnyObject
有一个很大的缺点,那就是每次你使用它们包含的值时,你通常必须将值“转换”为真实的东西,如整数或字符串。这可能会很痛苦,更糟糕的是,当您假设您拥有一种东西而实际上您拥有另一种东西时,有时会导致错误。 Swift 通常鼓励您对类型进行更具体的说明,以避免出现此类错误。