使用struct with arrays(多个级别)

时间:2017-01-19 14:59:02

标签: arrays json struct swift3

我有以下问题,我生成结构以在网上存储来自JSON的信息。以下是用于理解结构的代码提取。

struct Planificacion {
    let semana: [Semana]
    init(semana: [Semana]) {
        self.semana = semana
    }
    struct Semana {
        let id: Int
        let numero: Int
        let clase: [Clase]
        init(id: Int, numero: Int, clase: [Clase]) {
            self.id = id
            self.numero = numero
            self.clase = clase
        }

        struct Clase {
            let clase: String
            let id: Int
            let numero: Int
            let fecha_progr: String
            let comentarios: [Comentarios]
            let actividades: [Actividades]

            init(clase: String, id: Int, numero: Int, fecha_progr: String, comentarios: [Comentarios], actividades: [Actividades]) {
                self.clase = clase
                self.id = id
            self.numero = numero
            self.fecha_progr = fecha_progr
            self.comentarios = comentarios
            self.actividades = actividades
            }

            struct Comentarios {
                let id: Int
                let texto: String
                let fecha: String
                let usuario: String

                init(id: Int, texto: String, fecha: String, usuario: String) {
                    self.id = id
                    self.texto = texto
                    self.fecha = fecha
                    self.usuario = usuario
                }
            }

            struct Actividades {
                let id: Int
                let texto: String
                let tipo: String
                let ra: [RA]
                init(id: Int, texto: String, tipo: String, ra: [RA]) {
                    self.id = id
                    self.texto = texto
                    self.tipo = tipo
                    self.ra = ra
                }

                struct RA {
                    let id: Int
                    let nombre: String
                    init(id: Int, nombre: String) {
                        self.id = id
                        self.nombre = nombre
                    }
                }
            }
        }
    }
}

var plani = [Planificacion]()
let url = URL(string: "https://www.example.com")!

URLSession.shared.dataTask(with:url) { (data, response, error) in
    if error != nil {
        print(error!)
    } else {

            do {
            let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! NSDictionary

            for (key, value) in parsedData {
                var semanaT = String()
                var numeroT = Int()
                var idT = Int()
                var clasesT = [Any]()
                if let semana = parsedData[key] as? NSDictionary {

                .
                .
                .
                    if let clases = semana["clases"] as? [String:Any] {
                        for (key, value) in clases {
                            var claseT = String()
                            var idClaseT = Int()
                            var numeroClaseT = Int()
                            var fecha_progT = String()
                            var estadosT = [Any]()
                            var comentariosT = [Any]()
                            var actividadesT = [Any]()

                            if let clase = clases[key] as? NSDictionary {
                                .
                                .
                                .

                                if let actividades = clase["actividades"] as? [String:Any] {
                                    for (key, value) in actividades {
                                        var idActividadT = Int()
                                        var textoActividadT = String()
                                        var tipoActividadT = String()
                                        var rasT = [Any]()

                                        if let actividadesInfo = actividades[key] as? NSDictionary {
                                        .
                                        .
                                        .
                                            if let ras = actividadesInfo["ra"] as? [String:Any] {
                                                for (key, value) in ras {
                                                    .
                                                    .
                                                    .

                                                    var RA = Planificacion.Semana.Clase.Actividades.RA(id: idRAT, nombre: nombreRAT)
                                                    rasT.append(RA)
                                                }
                                            }
                                        }
                                   **var actividad = Planificacion.Semana.Clase.Actividades(id: idActividadT, texto: textoActividadT, tipo: tipoActividadT, ra: rasT)**
                                   actividadesT.append(actividad)
                                }
                            }
                            .
                            .
                            .
                        }
                        **var clase = Planificacion.Semana.Clase(clase: claseT, id: idClaseT, numero: numeroClaseT, fecha_progr: fecha_progT, comentarios: comentariosT, estado: estadosT, actividades: actividadesT)**
                    }
                }
            }
    } catch let error as NSError {
        print(error)
    }
}
}.resume()

我现在的问题是我无法保存变量“actividad”,这是粗体,我认为是由“rasT”数组发生的,但我不确定。控制台抛出以下错误。

error: cannot invoke value of type 'Planificacion.Semana.Clase.Actividades.Type' with argument list '(id: Int, texto: String, tipo: String, ra: [Any])'
                               var actividad = Planificacion.Semana.Clase.Actividades(id: idActividadT, texto: textoActividadT, tipo: tipoActividadT, ra: rasT)
                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

我找不到问题,这个问题在“clase”中复制,几乎在代码的末尾,也是粗体。

1 个答案:

答案 0 :(得分:0)

错误告诉你整个问题。您已将[Any]传递给需要[RA]的参数。

var actividad = Planificacion.Semana.Clase.Actividades(id: idActividadT, texto: textoActividadT, tipo: tipoActividadT, ra: rasT)

所以rasT似乎是[Any],这正是我们所看到的:

var rasT = [Any]()

这应该是[RA]