l-s*_*ark 38 nsuserdefaults loaddata swift
我正在尝试使用NSUserDefaults保存数组然后加载数组,但是我得到错误"无法推断出泛型参数的参数".有什么我做错了吗?似乎没有人在swift中遇到这个问题,所以我找不到任何解决方案.
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array {
self.showDataLabel.text = defaults.objectForKey("testScoreSATArray") as Array
}
}
Run Code Online (Sandbox Code Playgroud)
Air*_*ity 65
您收到原始错误的原因是,在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)
}
}
Run Code Online (Sandbox Code Playgroud)
Array<Int>
你可以写下较短的表格,而不是写作,[Int]
您也可以使用NSArray
正如您所发现的那样解决问题.不同于Array
,NSArray
不使用泛型,因为它起源于Objective-C,它对Swift有不同的方法.相反,NSArray
只持有一种东西,一种AnyObject
.这是一个可以指向任何类的实例的引用.
然而,有一个很大的缺点,使用NSArray
和AnyObject
,这是每次使用它们包含的值时,你往往要"投"的值,以一个真实的东西,像一个整数或字符串.这可能是一种痛苦,更糟糕的是,当你认为自己有另一种东西时,有时可能会导致错误.Swift通常鼓励您更加具体地了解类型以避免这样的错误.
归档时间: |
|
查看次数: |
35100 次 |
最近记录: |