如何在 swift 中保存和读取 NSUserdefaults 中的数组数组? [英] how to save and read array of array in NSUserdefaults in swift?

查看:21
本文介绍了如何在 swift 中保存和读取 NSUserdefaults 中的数组数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建一个数组来添加这种格式的对象,例如 Swift 中的字典:["key1": "value1", "key2": "value2"]

I need create an array to add objects with this format like a dictionary in Swift : ["key1": "value1", "key2": "value2"]

当我尝试使用 NSUserDefaults 保存它时,一切都是正确的,但是当使用密钥读取 NSUserDefaults 时,它会崩溃.我的 var obj 需要什么类型的数据?

When I try to save it with NSUserDefaults all is correct, but when read NSUserDefaults with the key this crashes. What type of data does my var obj need?

let def = NSUserDefaults.standardUserDefaults()
var key = "keySave"
var element: AnyObject!

var array1: [AnyObject!] = []
array1.append(["key1": "val1", "key2": "val2"])
array1.append(["key1": "val1", "key2": "val2"])

//save
var savestring : [AnyObject!]
savestring = array1
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savestring, forKey: key)
defaults.synchronize()

//read
var obj: [AnyObject!] = []
if(obj != nil){
    print("size: ")
    print(obj.count) //vary long value confused..
    element = obj[0]  //crash
    print(element.objectForKey("key1"))
}

推荐答案

问题是array of array",但我想大多数人可能只是想知道如何将数组保存到 UserDefaults.对于这些人,我将添加一些常见的示例.

The question reads "array of array" but I think most people probably come here just wanting to know how to save an array to UserDefaults. For those people I will add a few common examples.

保存数组

let array = ["horse", "cow", "camel", "sheep", "goat"]

let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")

检索数组

let defaults = UserDefaults.standard
let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()

整数数组

保存数组

let array = [15, 33, 36, 723, 77, 4]

let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedIntArray")

检索数组

let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedIntArray")  as? [Int] ?? [Int]()

布尔数组

保存数组

let array = [true, true, false, true, false]

let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedBoolArray")

检索数组

let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedBoolArray")  as? [Bool] ?? [Bool]()

日期数组

保存数组

let array = [Date(), Date(), Date(), Date()]

let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedDateArray")

检索数组

let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedDateArray")  as? [Date] ?? [Date]()

对象数组

自定义对象(以及随之而来的对象数组)需要更多的工作才能保存到 UserDefaults.请参阅以下链接了解如何操作.

Object array

Custom objects (and consequently arrays of objects) take a little more work to save to UserDefaults. See the following links for how to do it.

  • nil 合并运算符 (??) 允许您返回保存的数组或空数组而不会崩溃.这意味着如果对象返回 nil,则将使用 ?? 运算符后面的值.
  • 如您所见,IntBoolDate 的基本设置相同.我还用 Double 对其进行了测试.据我所知,您可以保存在属性列表中的任何内容都可以这样工作.
  • The nil coalescing operator (??) allows you to return the saved array or an empty array without crashing. It means that if the object returns nil, then the value following the ?? operator will be used instead.
  • As you can see, the basic setup was the same for Int, Bool, and Date. I also tested it with Double. As far as I know, anything that you can save in a property list will work like this.

这篇关于如何在 swift 中保存和读取 NSUserdefaults 中的数组数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆