我有一个数组作为对象存储在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]