Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法推断泛型参数的参数_Swift_Nsuserdefaults_Loaddata - Fatal编程技术网

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

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

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通常鼓励您更具体地描述类型,以避免类似的错误。

很好的答案,帮助我掌握了泛型的概念。。。最后