编辑保存到用户默认值的数组SWIFT

时间:2015-08-13 10:14:46

标签: ios swift xcode6.4

我一直在尝试从保存到用户默认值的数组中读取数据,但对象类型会导致冲突。

if NSUserDefaults.standardUserDefaults().valueForKey("data")==nil{
        let arrya : Array = ["Apple", "Apricot", "Banana", "Blueberry", "Cantaloupe", "Cherry",
            "Clementine", "Coconut", "Cranberry", "Fig", "Grape", "Grapefruit",
            "Kiwi fruit", "Lemon", "Lime", "Lychee", "Mandarine", "Mango",
            "Melon", "Nectarine", "Olive", "Orange", "Papaya", "Peach",
            "Pear", "Pineapple", "Raspberry", "Strawberry"]
        NSUserDefaults.standardUserDefaults().setObject(arrya, forKey: "data")
}

var data = NSUserDefaults.standardUserDefaults().objectForKey("data")

我正在使用 objectForKey 而不是 valueForKey ,因为this问题的回答。

这个问题会回答我的问题,不过......嗯......事实并非如此。我还有问题。例如:

尝试

data.count

返回错误:

Value of type 'AnyObject?' not unwrapped; did you mean to use '!' or '?'?

尝试:

cell.textLabel?.text = data[0]

返回错误:

Could not find an overload for 'subscript' that accepts supplied arguments

为什么类型不兼容?我希望从User Defaults中检索的内容与此类型相同:

["hola", "alo", "ya", "shalom", bounjour", 1, 3, "ai"]

非常感谢您提前做出的任何回复。欢迎大家,非常感谢!

2 个答案:

答案 0 :(得分:0)

强制转换为数组

var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! Array<String>

如果让我们检查是否失败

,请更好地使用

答案 1 :(得分:0)

AnyObject?返回的值为NSUserDefaults(因为Array可以存储任何类型的对象),但您尝试将返回值视为data。它可能是一个数组,但编译器并不知道,所以你需要告诉它。

如果您确定返回的值将是一个字符串数组,您可以在初始化var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! [String] 变量时强制使用它:

data

编译器现在知道[String]类型为count,并使用下标和(re-frame/register-handler :got-user (fn [db [_ user]] (assoc db :user user))) (re-frame/register-handler :get-user (fn [db [_]] (ajax/GET "/user" {:handler #(re-frame/dispatch [:got-user %1])}) db)) 等属性。