如何使用 userDefaults 保存打印数组(swift 3)

Posted

技术标签:

【中文标题】如何使用 userDefaults 保存打印数组(swift 3)【英文标题】:how to use userDefualts to save printed array (swift3) 【发布时间】:2017-05-10 23:25:48 【问题描述】:

如何使用 userDefualts 来保存我的数组条目,以确保它们在用户退出应用程序时重新出现。我正在尝试使用 userDefualts 来保存 var numbersWithCreationDate

  import UIKit

    class ViewController: UIViewController 
    @IBOutlet var entry: UILabel!
             var numbersWithCreationDates = [(Int,String)]()
       @IBOutlet var label: UITextField!

        @IBOutlet var scrolView: UIScrollView!


    @IBAction func enterScore(_ sender: Any) 

    if let text = label.text 
        if let number = Int(text)
               // let numberAndDate = (number,Date())

            let date = Date().description
            let numberAndDate = (number, date.substring(to: date.characters.index(of: "+")!))
                numbersWithCreationDates.insert(numberAndDate, at: 0)
                        //line in question
           entry.text = numbersWithCreationDates.map  "\($0.0)| \($0.1)" .joined(separator:"\n\n")
            UserDefaults.standard.set(numbersWithCreationDates, forKey: "numbersWithCreationDates")
            UserDefaults.standard.synchronize()
            

        else 
        entry.text = "Please Enter Number"

        

// 让默认值 = UserDefaults.standard // defaults.set(numbersWithCreationDates, forKey: "SavedIntArray")

        

                  
extension Date 
    static var formattedNow: String 
        let now = Date()
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
        dateFormatter.timeZone = TimeZone(identifier: "EST")
        return dateFormatter.string(from: now)
    

【问题讨论】:

【参考方案1】:

设置标准默认值:

UserDefaults.standard.set(numbersWithCreationDates, forKey: "numbersWithCreationDates")
UserDefaults.standard.synchronize()

您可能需要在字典定义中使用 NSNumber 类而不是 Int(但可能不需要,键和变量需要遵守 NSCopying 才能保存为默认值)

检索:

let numbersWithCreationDates = UserDefaults.standard.object(forKey: "numbersWithCreationDates") as! [Int:String]

【讨论】:

我根据您的建议编辑了我的代码。 Sigarbt 错误即将出现。 1.不要不必要地拨打synchronize。 2.更重要的是,UserDefaults中不能存储元组数组。

以上是关于如何使用 userDefaults 保存打印数组(swift 3)的主要内容,如果未能解决你的问题,请参考以下文章

从 UserDefaults 获得的布尔值打印为 0 或 1,即使保存为 Any

如何保存整个整数数组?

尝试将数组保存到 UserDefaults

存储/保存 @State 数组 (UserDefaults)

什么是使用UserDefaults保存数据的适当事件?

检测存储在 UserDefaults 中的数组中的项目