Siento que este tema se usa mucho cuando se leen APIs de servidores, asi como lo mencionas de ejemplo
Estructuras y Clases
Qué aprenderás sobre la programación orientada a objetos en Swift
Estructuras vs Clases
Estructuras: datos copiados por valor
Clases: datos referenciados
Tipos de Propiedades
Stored Properties
Lazy Stored Properties
Computed Properties
Computed Properties de sólo lectura
Property Observers
Type Properties
Métodos, subíndices y herencia
Métodos de instancia
Mutating Methods
Métodos de clase
Subíndices
Matrices usando subíndices
Herencia
Sobreescritura de variables y métodos
Inicializadores o constructores
Inicializadores
Nombres, etiquetas y optionals
Inicializadores en subclases
Failable Initializer
Destrucción de objetos con deinit
Encadenamiento opcional
Optional Chaining
Clases ejemplo para Optional Chaining
Ejemplo práctico con Optional Chaining
Optional Chaining múltiple
Conclusión
Cierre del curso
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Aportes 4
Preguntas 1
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()```
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.