gpt4 book ai didi

swift - 无法推断通用参数的参数

转载 作者:IT王子 更新时间:2023-10-29 05:01:58 26 4
gpt4 key购买 nike

我试图用 NSUserDefaults 保存一个数组,然后加载该数组,但我收到错误“无法推断通用参数的参数”。我做错了什么吗?似乎没有人很快遇到这个问题,所以我找不到任何解决方案。

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 .这是一个可以指向任何类实例的引用。

但是,使用 NSArray 有很大的缺点和 AnyObject ,也就是说,每次使用它们包含的值时,您通常必须将该值“转换”为真实的事物,例如整数或字符串。这可能会很痛苦,更糟糕的是,当您假设您拥有一种东西而实际上您拥有另一种东西时,有时会导致错误。 Swift 通常鼓励您对类型更加具体,以避免出现此类错误。

关于swift - 无法推断通用参数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30381490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com