如何保存整个数组的整数?

时间:2017-03-23 18:29:16

标签: arrays swift swift-playground

我需要将所有数据保存在整数数组中。我在Swift Playgrounds,我尝试使用UserDefaults保存它们以存储在

let savedSugarArray = [UserDefaults.standard.integer(forKey: "sugarArray")]

这将数据放入savedSugarArray

UserDefaults.standard.setValue(sugarArray, forKey: "sugarArray")

由于我使用Swift Playgrounds,我认为我不会使用核心数据,因为它太长了。还有另一种方法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

UserDefaults在操场(Xcode 8.2.1)中的功能与在项目中的功能相同。通常,您将使用以下内容:

集:

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]
}

得到:

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")
}

但是,要显示UserDefaults在游乐场中的功能不同,只需将其复制到您的游乐场:

{{1}}

答案 1 :(得分:0)

我认为扩展在这里真的很有帮助

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

然后返回结果