使用 swift 将数组保存和检索到用户默认值

Posted

技术标签:

【中文标题】使用 swift 将数组保存和检索到用户默认值【英文标题】:save and retrieve array to user default using swift 【发布时间】:2018-12-18 03:50:07 【问题描述】:

我想将数组从 json 保存到用户默认值,我会在打印时得到数组。当我在不同的视图控制器中检索它时,我只得到最后一个数组。 那么如何在不同的视图控制器中检索所有数据用户默认值。

这就是我将代码保存在用户默认值中的方式

第一个视图控制器

let kode_pelaksanaan = item["kode_pelaksanaan"].string
UserDefaults.standard.set(kode_pelaksanaan, forKey: "kode_pelaksanaan")

输出:

kode_pelaksanaan : ELR2018120005
kode_pelaksanaan : ELR2018120004
kode_pelaksanaan : ELR2018120003
kode_pelaksanaan : ELR2018120001
kode_pelaksanaan : ELR2018050004

在第二个视图控制器中检索它

let data = UserDefaults.standard.object(forKey: "kode_pelaksanaan")

let parameter =  [
            "request" : "\"requestMethod\":\"detail_selflearning\",\"user\":\"\(user)\",\"kode_pelaksanaan\":\"\(data ?? "0")\""
        ]

输出检索

kode_pelaksanaan : ELR2018050004

我想输出第二个视图控制器

kode_pelaksanaan : ELR2018120005
kode_pelaksanaan : ELR2018120004
kode_pelaksanaan : ELR2018120003
kode_pelaksanaan : ELR2018120001
kode_pelaksanaan : ELR2018050004

【问题讨论】:

您需要提供更多信息。 item 是如何声明的? .string 的类型是什么?你print 做了什么来获得这些输出? 您在 UserDefaults 中只保存了一个字符串。所以只有你得到一个单一的价值。您必须在 UserDefaults 中保存一组字符串。那么只有你会得到所有的价值。 【参考方案1】:

您的代码 sn-p 没有提供足够的信息。

这是一个如何从 UserDefaults 存储和检索数组的示例

var myArray = [0,1,2]

override func viewDidLoad()

    super.viewDidLoad()
    UserDefaults.standard.set(myArray, forKey: "yourArray")

    let data = UserDefaults.standard.object(forKey: "yourArray")!
    print(data)

【讨论】:

【参考方案2】:

用户默认值+包装器

    final class UDWrapper 
        class func setArray(key: String, value: NSArray) 
            setObject(key: key, value: value)
        

        class func getArray(key: String) -> [Any]? 
            return UserDefaults.standard.array(forKey: key)
        

    class func setObject(key: String, value: Any?) 
        if value == nil 
            UserDefaults.standard.removeObject(forKey: key)
         else 
            UserDefaults.standard.set(value, forKey: key)
        
    

用法

  let array: NSArray = ["Hello, World!", 42]
  UDWrapper.setArray(key: "myarray", value: array)

  print(UDWrapper.getArray(key: "myarray") ?? "")

【讨论】:

【参考方案3】:

这样使用:

    // To save array in UserDefault
    let names = ["John", "Alex", "Matien", "Flex"]
    UserDefaults.standard.set(names, forKey: "names")

    // To get names array from UserDefault safely.
    if let allNames = UserDefaults.standard.object(forKey: "names") as? [String] 
        print(allNames)
    

【讨论】:

这是一件很容易对答案投反对票的事情。但很难解释这是怎么回事?为什么???

以上是关于使用 swift 将数组保存和检索到用户默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何保存响应 JSON 数组并在 swift 中使用用户默认值进行检索

Swift 将值添加到现有用户默认值

如何从图像文字数组中选择单个图像并将其保存为swift 5中的用户默认值

将数组数组保存为用户默认值

Swift 3 NSCoder 无法识别的选择器发送到实例

如何将 JSON 令牌保存到用户默认值,然后在不同的视图中使用它?斯威夫特 4