如何保存整个整数数组?
How to save an entire array of Integers?
我需要将所有数据保存在一个整数数组中。我在 Swift 游乐场,我尝试使用 UserDefaults 将它们保存到
let savedSugarArray = [UserDefaults.standard.integer(forKey: "sugarArray")]
这是为了将数据放入 savedSugarArray
UserDefaults.standard.setValue(sugarArray, forKey: "sugarArray")
由于我使用的是 Swift Playgrounds,我想我宁愿不使用核心数据,因为它太长了。还有另一种方法吗?提前谢谢你。
UserDefaults 在 playground (Xcode 8.2.1) 中的功能与在项目中的功能不同。通常,您会使用以下内容:
设置:
let integerArray: [Int] = [1,2,3,4,5]
UserDefaults.standard.set(integerArray, forKey: "sugarArray")
获取:
if let integerArray = UserDefaults.standard.object(forKey: "sugarArray") as? [Int]{
//good to go
}
else{
//no object for key "sugarArray" or object couldn't be converted to [Int]
}
但是,要表明 UserDefaults 在 playground 中的功能不同,只需将其复制到您的 playground 中:
let integerArray: [Int] = [1,2,3,4,5]
UserDefaults.standard.set(integerArray, forKey: "sugarArray")
if let integerArray = UserDefaults.standard.object(forKey: "sugarArray") as? [Int]{
print("UserDefaults work in playground")
}
else{
print("UserDefaults do not work in playground")
}
我认为扩展在这里很有用
extension UserDefaults {
open func set(_ intArray: [Int], forKey defaultName: String) {
let array: NSArray = intArray as NSArray
set(array, forKey: defaultName)
}
func intArray(forKey defaultName: String) -> [Int] {
var result: [Int] = []
let found = value(forKey: defaultName) as? NSArray ?? []
found.forEach {
guard let item = [=10=] as? Int else {
return
}
result.append(item)
}
return result
}
}
用法:
UserDefaults.standard.set([1,2,3,4,5], forKey: "sugarArray")
UserDefaults.standard.synchronize()
let sugarArray = UserDefaults.standard.intArray(forKey: "sugarArray")
一点解释
Int
的数组转换为NSArray
的对象,然后保存到UserDefaults
为了获取数组,我们获取一个对象并尝试将其解析为 NSArray
然后我们将找到的数组中的每个项目转换为 Int
然后return结果
我需要将所有数据保存在一个整数数组中。我在 Swift 游乐场,我尝试使用 UserDefaults 将它们保存到
let savedSugarArray = [UserDefaults.standard.integer(forKey: "sugarArray")]
这是为了将数据放入 savedSugarArray
UserDefaults.standard.setValue(sugarArray, forKey: "sugarArray")
由于我使用的是 Swift Playgrounds,我想我宁愿不使用核心数据,因为它太长了。还有另一种方法吗?提前谢谢你。
UserDefaults 在 playground (Xcode 8.2.1) 中的功能与在项目中的功能不同。通常,您会使用以下内容:
设置:
let integerArray: [Int] = [1,2,3,4,5]
UserDefaults.standard.set(integerArray, forKey: "sugarArray")
获取:
if let integerArray = UserDefaults.standard.object(forKey: "sugarArray") as? [Int]{
//good to go
}
else{
//no object for key "sugarArray" or object couldn't be converted to [Int]
}
但是,要表明 UserDefaults 在 playground 中的功能不同,只需将其复制到您的 playground 中:
let integerArray: [Int] = [1,2,3,4,5]
UserDefaults.standard.set(integerArray, forKey: "sugarArray")
if let integerArray = UserDefaults.standard.object(forKey: "sugarArray") as? [Int]{
print("UserDefaults work in playground")
}
else{
print("UserDefaults do not work in playground")
}
我认为扩展在这里很有用
extension UserDefaults {
open func set(_ intArray: [Int], forKey defaultName: String) {
let array: NSArray = intArray as NSArray
set(array, forKey: defaultName)
}
func intArray(forKey defaultName: String) -> [Int] {
var result: [Int] = []
let found = value(forKey: defaultName) as? NSArray ?? []
found.forEach {
guard let item = [=10=] as? Int else {
return
}
result.append(item)
}
return result
}
}
用法:
UserDefaults.standard.set([1,2,3,4,5], forKey: "sugarArray")
UserDefaults.standard.synchronize()
let sugarArray = UserDefaults.standard.intArray(forKey: "sugarArray")
一点解释
Int
的数组转换为NSArray
的对象,然后保存到UserDefaults
为了获取数组,我们获取一个对象并尝试将其解析为 NSArray
然后我们将找到的数组中的每个项目转换为 Int
然后return结果