es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo navegar a través de un modelo de datos para obtener el valor específico de las claves en el nivel más bajo?

Tengo datos en un modelo definido de la siguiente manera:

struct pickerDataModel: Decodable {
    var material: [[String: [String: [details]]]]?
}
struct details: Decodable {
    var min, wallmin, wallstd, max: String?
    var std, wallmax, mouldid: String?
}

Decodifico mis datos JSON en este modelo y luego intento acceder a través de los datos. Recupero valores específicos de la siguiente manera:

let matr = (data as NSDictionary).object(forKey: selectorKeyLetters[component0Row])
let matt = (matr as! NSDictionary).object(forKey: selectorKeyNumbers[component1Row])

Si imprimo “matt” en la consola, obtengo la siguiente salida:

Optional(<swift.__swiftdeferrednsarray 0x6000024793c0="">(
    test.details(
        min: Optional("75"),
        wallmin: Optional("5"),
        wallstd: Optional("17"),
        max: Optional("500"),
        std: Optional("150"),
        wallmax: Optional("30"),
        mouldid: Optional("136")
    )
))

¿Cómo puedo obtener los valores para min:, max:, wallmin: etc., ya que la variable “matt” es de tipo Any y no tiene claves?

He intentado todas las combinaciones que se me ocurren para obtener las claves, pero nada funciona y he buscado una solución sin éxito. ¿Alguien puede aconsejarme en qué estoy haciendo mal, porque estoy perdido? ¿Estoy usando el modelo de datos correctamente? Matr me proporciona un material específico y matt me proporciona un tamaño específico. Ahora quiero acceder a los “detalles” del modelo para ese material y tamaño específicos.

Espero que esta pregunta sea comprensible. Soy nuevo en el aprendizaje de Swift y estoy convirtiendo una aplicación de Objective-C, de ahí la confusión.</swift.__swiftdeferrednsarray>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener los valores de min:, max:, wallmin: etc. de la variable “matt”, puedes convertirla en un objeto “details” utilizando la declaración “if let” y luego acceder a sus propiedades. Aquí tienes un ejemplo:

    if let detailsObj = matt as? details {
       // Accede a las propiedades utilizando detailsObj
       let minVal = detailsObj.min
       let maxVal = detailsObj.max
       let wallminVal = detailsObj.wallmin
       // y así sucesivamente...
    }
    

    Puedes utilizar este mismo método para acceder a cualquier otro valor específico del objeto “details”.

    En cuanto a tu uso del modelo de datos, parece que estás en el camino correcto. Has definido el modelo correctamente y estás decodificando los datos JSON en él. El problema radica principalmente en acceder a los valores de los datos decodificados, lo cual puede ser un poco complicado en Swift debido a la seguridad de tipos.

Comments are closed.