将Struct数组保存到NSUserDefault Swift 3?

时间:2017-02-05 05:43:37

标签: swift struct swift3 nsuserdefaults

当我尝试在重启期间使用App保存数据时,我在保存到NSUserDefault时发现我无法直接使用Structs保存,根据我读的NSUserDefaults只能保存一小部分类型:NSData,NSString,NSNumber,NSDate,NSArray只包含这些类型,或者只包含这些类型的NSDictionary,但我在C中找到了一些我不熟悉的形式,有些在Swift中,但我不太明白,除此之外我找不到使用Struct“CursosG”中嵌入的Struct“Carreras”的方法。我正在寻找一种能够在Swift 3中运行它的有效方法。这是我的代码:

struct CursosG {
    let id: Int
    let nrc: String
    let profesor: String
    let carreras: [Carreras]
    let dia: String
    let bloque: String
    let sala: String
    let idcurso: Int
    let comentario: String
    let curso: String

    init(id: Int, nrc: String, profesor: String, carreras: [Carreras], dia: String, bloque: String, sala: String, idcurso: Int, comentario: String, curso: String) {
        self.id = id
        self.nrc = nrc
        self.profesor = profesor
        self.carreras = carreras
        self.dia = dia
        self.bloque = bloque
        self.sala = sala
        self.idcurso = idcurso
        self.comentario = comentario
        self.curso = curso
    }    

    struct Carreras {
        let id: Int
        let nombre: String
        let semestre: Int

        init(id: Int, nombre: String, semestre: Int) {
            self.id = id
            self.nombre = nombre
            self.semestre = semestre
        }
    }
}

...

var CursoAllG = [CursoG]()

...

let curso = CursosG(id: idT, nrc: nrcT, profesor: profesorT, carreras: carrers as! [CursosG.Carreras], dia: diaT, bloque: bloqueT, sala: salaT, idcurso: idcursoT, comentario: comentarioT, curso: cursoT)
CursosAllG.append(curso)

...

UserDefaults.standard.set(CursosAllG, forKey: "cursosAllG")

我应该如何转换结构?

1 个答案:

答案 0 :(得分:0)

您需要将struct数据转换为NSData,然后才能存储它。这是一个描述它的链接Structs to NSData to Structs?

但是我仍然觉得你应该使用字典而不是使用结构,因为它具有跨平台支持。