Ios 如何将swift中的类保存为无参数的userdefaults

Ios 如何将swift中的类保存为无参数的userdefaults,ios,swift,userdefaults,Ios,Swift,Userdefaults,我无法找到一个合适的社区来发布,所以如果这是离题的话,我很抱歉。在swift中将自定义类保存为userdefaults时遇到问题。我看到的每一个其他答案都需要用参数初始化类,但我正在寻找一种在编码时绕过这一点的方法。我还想知道userdefaults是否是最佳选择?这是一个很大的数据量,但我试图避免使用关系数据库,因为我只是试图直接保存这个数据结构,而不创建模式。将中介添加到中介对象数组,然后尝试对数据进行编码时,会产生错误 我的代码: import Foundation class Save

我无法找到一个合适的社区来发布,所以如果这是离题的话,我很抱歉。在swift中将自定义类保存为userdefaults时遇到问题。我看到的每一个其他答案都需要用参数初始化类,但我正在寻找一种在编码时绕过这一点的方法。我还想知道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的方法是使用JSONECoder

因此,请确保您的调解可通过以下方式进行编码:

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)
}
最后,要获取数组,请执行以下操作:

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

你做了什么?你的想法是什么?为什么要避免使用关系数据库?您实现了什么代码?谢谢您的回复!这样更好吗@impression7vx错误是什么?@impression7vx在向对象数组添加中介时,出现了一个无法识别的选择器错误,我想我已经修复了它,但我想知道如何在不提供参数的情况下对类进行编码?