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 obtener datos basados en los datos del nivel previo

Tengo el siguiente JSON:

{
  "type": "regular",
  "data": [
    {
      "title": "Título 1",
      "price_regular": 1.1,
      "price_express": 2.2
    },
    {
      "title": "Título 2",
      "price_regular": 1.1,
      "price_express": 2.2
    }
  ]
}

Para esto tengo el siguiente modelo:

struct MainModel : Codable {
    var type : String?
    var data : [DataModel]?
}

struct DataModel : Codable {
    var title : String?
    var price_regular : Float?
    var price_express : Float?

    var price : Float {
        get {
            if (type == "regular") { ----> Por favor, revisa la siguiente consulta para esto.
                return price_regular ?? 0.0
            }

            return price_express ?? 0.0
        }
    }
}

Lo que estoy haciendo en DataModel es crear una nueva variable llamada price. Quiero verificar qué datos tengo para el tipo de clase principal y, en función de eso, obtener el valor de Precio. ¿Hay alguna forma de lograr esto?

En realidad, estoy jugando en el modelo. Sé que puedo hacer esto en tiempo de ejecución, pero me gustaría hacerlo en el modelo para que la lógica esté en un solo lugar.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr esto verificando el valor de la variable type en MainModel y en función de ese valor, puedes acceder a price_regular o price_express en DataModel. Aquí está el código actualizado:

    struct MainModel: Codable {
        var type: String?
        var data: [DataModel]?
    
        var isRegular: Bool {
            return type == "regular"
        }
    }
    
    struct DataModel: Codable {
        var title: String?
        var price_regular: Float?
        var price_express: Float?
    
        var price: Float {
            get {
                if let mainModel = try? JSONDecoder().decode(MainModel.self, from: jsonData),
                   let isRegular = mainModel.isRegular {
    
                    if isRegular {
                        return price_regular ?? 0.0
                    } else {
                        return price_express ?? 0.0
                    }
                }
    
                return 0.0
            }
        }
    }
    

    Aquí he agregado una nueva propiedad computada isRegular en MainModel, que verifica el valor de type y devuelve un booleano. En la propiedad price de DataModel, estoy usando este booleano para determinar si usar price_regular o price_express para calcular el precio final. Ten en cuenta que deberás pasar los datos JSON a la propiedad price para que esto funcione.

Comments are closed.