iOS:如何将存储AnyObject类型的NSUserDefaults转换为数组

时间:2015-10-16 05:14:24

标签: ios swift types casting

我已经将数组放入NSUserDefaults()中,如下所示:

NSUserDefaults.standardUserDefaults().setObject(users, forKey: "usersArray")
NSUserDefaults.standardUserDefaults().synchronize()

然后我把它拉出来:

fetchedUserArray = NSUserDefaults.standardUserDefaults().objectForKey("usersArray")

我面临的问题是,一旦从NSUserDefaults中删除它,它就是NSArray类型,阻止我像Swift数组一样操纵它。我试过这个转换类型,但编译器无法识别变量" castedUsersArray"尽管在类型转换时没有引起任何错误,但是稍后在代码中使用它时:

var fetchedArray = NSUserDefaults.standardUserDefaults().objectForKey("usersArray") as? NSArray
var castedUsersArray = fetchedArray as AnyObject as [String]

我花了很长时间没有成功。斯威夫特的类型限制让我疯狂 谢谢,
尼克

2 个答案:

答案 0 :(得分:0)

你几乎拥有它。不要将objectForKey转换为数组,而是将包含某种类型的数组转换为castedUsersArray。不要像使用fetchedArray那样丢弃类型信息。

let users = ["Amy", "Bill", "Cindy"]

NSUserDefaults.standardUserDefaults().setObject(users, forKey: "usersArray")
NSUserDefaults.standardUserDefaults().synchronize()

let fetched = NSUserDefaults.standardUserDefaults().objectForKey("usersArray") as? [String] ?? []

该行末尾的nil合并处理空的NSUserDefaults案例。

enter image description here

答案 1 :(得分:0)

NSUserDefaults 有一个特定的方法来获取名为stringArrayForKey的存储字符串数组:

let stringArray = ["Hello","playground"]

存储你的字符串数组

NSUserDefaults.standardUserDefaults().setObject(stringArray, forKey: "stringArray")

在需要时加载

if let loadedStringArray = NSUserDefaults.standardUserDefaults().stringArrayForKey("stringArray") {
    print(loadedStringArray)   // ["Hello", "playground"]
}