如何保存整个整数数组?

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

然后返回结果

【讨论】:

以上是关于如何保存整个整数数组?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 如何保存/打印 整个Http请求头和附带的post数据?

应用程序退出时保存整数 - Apple iOS

保存数组地址的指针的地址如何相同?

Cakephp:保存数组值而不是整数

在 CloudKit 中保存对象数组

如何保存从python中的图像转换的数组? [复制]