Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Optional Chaining múltiple

26/27
Recursos

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Siento que este tema se usa mucho cuando se leen APIs de servidores, asi como lo mencionas de ejemplo

Como aporte existe también el “coalescing operator”, el cual puede ser útil para combinarlo con el “chaining multiple”, El operador es ?? y se puede utilizar de la siguiente manera:

En caso de que la evaluación de la izquierda sea NIL se asigna el valor de la derecha. ✌

Excelente clase, realmente este concepto es muy usado en todos los lenguajes solo que aca se puede ver el por que el uso de la variable optional que no se usa en otros lenguajes y que puede ser muy problematico cuando cualquier elemento es nulo generando que las aplicaciones fallen de forma muy facil.

class Cliente {
    var nombre: String
    var presupuesto: Double
    var resicencia: Residence?
    
    init(nombre: String, presupuesto: Double) {
        self.nombre = nombre
        self.presupuesto = presupuesto
    }
    
    func restarPresupuesto(valor: Double) {
        self.presupuesto -= valor
    }
    
}

class Repartidor {
    var nombre: String
    var vehiculo: Vehiculo
    
    init(nombre: String, vehiculo: Vehiculo) {
        self.nombre = nombre
        self.vehiculo = vehiculo
    }
}

class Vehiculo {
    var marca: String
    var modelo: String
    var anio: String?
    var placa: String?
    
    init(marca: String, modelo: String) {
        self.marca = marca
        self.modelo = modelo
    }
}

class Articulo {
    var nombre: String
    var precio: Double
    var stock: Int?
    
    init(nombre: String, precio: Double) {
        self.nombre = nombre
        self.precio = precio
    }
}

class Pedido {
    var cliente: Cliente
    var repartidor: Repartidor?
    var articulos: [Articulo]? = [Articulo]()
    var direccionEnvio: String? {
        get {
            var direccionPersona: String
            if let direccion = cliente.resicencia?.address?.street {
                direccionPersona = direccion
                return direccionPersona
            } else {
                return nil
            }
        }
    }
    var totalPedido: Double?
    
    init(cliente: Cliente) {
        self.cliente = cliente
    }
    
    func agregarArticulosAlPedido(articulo: Articulo) {
        self.articulos?.append(articulo)
    }
    
    func obtenerTotal() -> Double{
        if let articulos = self.articulos {
            var totales = 0.00
            articulos.forEach { (art: Articulo) in
               totales += art.precio
            }
            return totales
        } else {
            return 0.00
        }
    }
    
    func RealizarPedido() {
        guard let totalPedido = totalPedido, let direccionEnvio = self.direccionEnvio else {
            print("No se ha podido realizar el pedido, agregue productos")
            return
        }
        print("Se va a enviar \(self.articulos!.count) a \(self.cliente.nombre) en la direccion \(direccionEnvio) con un total de \(totalPedido)")
        cliente.restarPresupuesto(valor: totalPedido)
    }
    
    func AsignarRepartidor(repartidor: Repartidor) {
        self.repartidor = repartidor
    }
}

let cliente1 = Cliente(nombre: "Jonathan", presupuesto: 500.20)

cliente1.resicencia

var residenciaCliente1 = Residence()
residenciaCliente1.rooms.append(Room(name: "Cuarto master"))

residenciaCliente1.address = Address()
residenciaCliente1.address?.buildingName = "Torres de la costa"
residenciaCliente1.address?.buildingNumber = "202"
residenciaCliente1.address?.street = "bosques de la costa"

cliente1.resicencia = residenciaCliente1

var zapatoNautico = Articulo(nombre: "ZapatoNautico", precio: 20.00)
var camisaPolo = Articulo(nombre: "Camisa polo blanca", precio: 20.00)
var telefono = Articulo(nombre: "iPhone 11", precio: 700.00)


var pedido1 = Pedido(cliente: cliente1)
pedido1.agregarArticulosAlPedido(articulo: zapatoNautico)
pedido1.agregarArticulosAlPedido(articulo: camisaPolo)
pedido1.agregarArticulosAlPedido(articulo: telefono)

pedido1.articulos

pedido1.totalPedido = pedido1.obtenerTotal()
pedido1.totalPedido
pedido1.direccionEnvio

pedido1.RealizarPedido()```