如何保存整个整数数组?
Posted
技术标签:
【中文标题】如何保存整个整数数组?【英文标题】:How to save an entire array of Integers? 【发布时间】:2017-03-23 18:29:16 【问题描述】:我需要将所有数据保存在一个整数数组中。我在 Swift Playgrounds 中,我尝试使用 UserDefaults 将它们保存到存储中
let savedSugarArray = [UserDefaults.standard.integer(forKey: "sugarArray")]
这将数据放入savedSugarArray
UserDefaults.standard.setValue(sugarArray, forKey: "sugarArray")
由于我使用的是 Swift Playgrounds,我想我宁愿不使用核心数据,因为它太长了。还有其他方法可以做到这一点吗?提前谢谢你。
【问题讨论】:
1.第一行代码中的方括号是什么? 2、为什么会误用setValue(forKey:)
来保存UserDefaults
中的对象?使用set(forKey:)
。 3. 你的实际问题是什么?
我使用方括号使其成为 Int 数组类型。我的问题是如何保存数组,以便我可以退出应用程序并仍然使用以前条目中的数据
您已经有了保存数组的代码。那么你有什么问题(除了我第一条评论中的问题)?
它不会保存。正如我之前所说,代码显然在那里,但它没有保存数组。
您是否按照说的做并使用set(forKey:)
而不是不正确的setValue(forKey:)
?
【参考方案1】:
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")
【讨论】:
那么我在 if 语句后面放了什么。它没有在数组中显示任何内容? 通常你会使用 integerArray 对象。在 Playground 中使用 UserDefaults 有什么好处?从概念上讲,对我来说没有多大意义。 这是为了比赛。我必须使用 Swift Playground。 我已成功使用 UserDefaults 从 textField 中保存字符串 如果您要问 if 语句的用途/用途,我建议您阅读一些基本逻辑语句。这应该是一个好的开始:en.wikipedia.org/wiki/Conditional_(computer_programming)【参考方案2】:我认为扩展在这里真的很有帮助
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 = $0 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
然后返回结果
【讨论】:
以上是关于如何保存整个整数数组?的主要内容,如果未能解决你的问题,请参考以下文章