我已经将数组放入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]
我花了很长时间没有成功。斯威夫特的类型限制让我疯狂
谢谢,
尼克
答案 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案例。
答案 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"]
}