簡體   English   中英

如何在沒有參數的情況下將類快速保存到用戶默認值

[英]How to save class in swift to userdefaults without arguments

我找不到合適的社區來發帖,所以如果這是題外話,我很抱歉。 我無法將自定義類快速保存到用戶默認值。 我見過的每個其他答案都需要用參數初始化類,但我在編碼時正在尋找解決方法。 我還想知道 userdefaults 是否是最佳選擇? 這是大量數據,但我試圖避免使用關系數據庫,因為我只是想直接保存此數據結構而不創建模式。 將中介添加到中介對象數組然后嘗試對數據進行編碼時,它會產生錯誤。

我的代碼:

import Foundation

class SavedData: NSObject, NSCoding {
func encode(with aCoder: NSCoder) {
    aCoder.encode(mediations, forKey: "mediations")
    aCoder.encode(name, forKey: "name")
}

required convenience init?(coder aDecoder: NSCoder) {
    let name = aDecoder.decodeObject(forKey: "name") as! String
    let mediations = aDecoder.decodeObject(forKey: "mediations") as! [Mediation]
    self.init(name: name, mediations: mediations)
}


init(name: String, mediations: [Mediation]) {
    // Get Saved Mediations from memory
    self.mediations = mediations
    self.name = name
}

public var mediations: [Mediation]
var name: String = "foo"

class Mediation {

    init(name: String, role: String, data: [[String]]) {
        self.name = name
        self.data = Data(defendant: data[0], plaintiff: data[1])
    }

    var role: String = ""
    var name: String = ""
    var data: Data

    class Data {

        init(defendant: [String], plaintiff: [String]) {
            self.defendant = defendant
            self.plaintiff = plaintiff
        }
        var plaintiff: [String] = []
        var defendant: [String] = []
    }
}

func new_mediation (name: String, role: String, data: [[String]]) {
    let mediation = Mediation(name: name, role: role, data: data)
    self.mediations.append(mediation)
}

}

我最喜歡的將自定義類數組保存到 UserDefaults 的方法是使用 JSONEncoder。

因此,請通過以下方式確保您的中介是可編碼的:

Class Mediation: Codable

然后保存數組:

let encodedMediations = try! JSONEncoder().encode(mediations)
UserDefaults.standard.set(encodedMediations, forKey: "SavedMediations")

最后獲取數組:

if let savedMediations = UserDefaults.standard.data(forKey: "SavedMediations") {
   let decodedMediations = try! JSONDecoder().decode([Mediation].self, from: savedMediations)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM