在NSUserDefault中类推通用对象

时间:2015-01-05 22:18:11

标签: ios swift

我有一个存储在NSUserDefaults中的数组作为对象。

var defaults = NSUserDefaults.standardUserDefaults()
var details = [1,2,3]
defaults.setObject(details, forKey: "testing_array")

// this is wrong
var percentArray : Array? = defaults.objectForKey("testing_array") as Array

如何检索并将其用作数组?如果我将它设置为anyObject,我以后就不能将它用作数组。

3 个答案:

答案 0 :(得分:1)

而不是:

var percentArray : Array? = defaults.objectForKey("testing_array") as Array

写:

var percentArray : Array<Int>? = defaults.objectForKey("testing_array") as? Array<Int>

因为在转换为数组时,您还需要指定它的泛型类型。

修改

基于亚马的评论。您也可以使用:

var percentArray  = defaults.objectForKey("testing_array") as [Int]

答案 1 :(得分:1)

objectForKey的结果可以作为AnyObject数组进行转换,也就是[AnyObject]?

你不能把它作为数组,因为那是一个通用的,你只能转换为特定的类。

正如Midhun指出的那样,在这种特定情况下,你实际上有一个Int数组,所以你可以使用更具体的[Int]?

为了更加安全,请使用if let构造来验证投射:

if let percentArray = defaults.objectForKey("testing_array") as? [Int] {
    println(percentArray)
}

答案 2 :(得分:1)

如果你知道它是一个Int数组的事实,只需向Swift解释它是一个Int数组(通过强制转换):

var percentArray = defaults.objectForKey("testing_array") as [Int]