NSUserDefault中的类型转换泛型对象



我有一个数组作为对象存储在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,则以后无法将其用作数组。

来自 objectForKey 的结果将可转换为 AnyObject 数组,也称为 [AnyObject]?

您不能将其转换为 Array,因为这是一个泛型,您只能强制转换为特定类。

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

为了提高安全性,请使用if let结构来验证铸件:

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

而不是:

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]

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

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

最新更新