在 NSUserDefault 中对通用对象进行类型转换
Typecasting generic object in 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,我以后就不能将它用作数组。
而不是:
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]
objectForKey 的结果将可转换为 AnyObject 数组,又名 [AnyObject]?
您不能将其转换为数组,因为它是通用的,您只能转换为特定的 class。
正如 Midhun 指出的那样,在这种特定情况下,您实际上有一个 Int 数组,因此您可以使用更具体的 [Int]?
为了更加安全,使用 if let
构造来验证转换:
if let percentArray = defaults.objectForKey("testing_array") as? [Int] {
println(percentArray)
}
如果您知道它是一个 Int 数组,只需向 Swift 解释它是一个 Int 数组(通过转换):
var percentArray = defaults.objectForKey("testing_array") as [Int]
我有一个数组作为对象存储在 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,我以后就不能将它用作数组。
而不是:
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]
objectForKey 的结果将可转换为 AnyObject 数组,又名 [AnyObject]?
您不能将其转换为数组,因为它是通用的,您只能转换为特定的 class。
正如 Midhun 指出的那样,在这种特定情况下,您实际上有一个 Int 数组,因此您可以使用更具体的 [Int]?
为了更加安全,使用 if let
构造来验证转换:
if let percentArray = defaults.objectForKey("testing_array") as? [Int] {
println(percentArray)
}
如果您知道它是一个 Int 数组,只需向 Swift 解释它是一个 Int 数组(通过转换):
var percentArray = defaults.objectForKey("testing_array") as [Int]