====== Programación orientada a objetos en swift ====== ===== Clases ===== class forma{ var lados = Int?//Atributo. Indicamos que el valor es opcional, si no se asigna valor será nil (Equivalente a NULL en este lenguaje) init(lados: Int){//Constructor de la clase self.lados = lados//El this es Self en Swift } func descSimple()->String{//metodo return "una forma con \(lados)" } } var formilla = forma()//instanciamos un objeto de la clase forma formilla.lados = 7 //Le asignamos un valor al atributo lados print(formilla.descSimple()) En caso de querer limpiar memoria tras borrar una clase podemos utiliza deinit ===== Herencia ===== Para indicar herencia simplemente ponemos dos puntos y la clase de la que se hereda. Se pueden sobreescribir funciones añadiendo un "override" antes del func. Se puede llamar al constructor del padre con "super.init(Atributo:Valor)": Class Poliedro: forma{ var nuevoAtributo: Int init(lados:Int, nuevoAtributo:Int){ super.init(lados:lados)//llamamos al constructor del padre self.nuevoAtributo = nuevoAtributo } override func descSimple(){ print("Hola, soy una función heredada reescrita") } } ===== Precondiciones y postcondiciones ===== Sirven para asignar aciones que se deben hacer antes y después de una tarea. ===== Enumeraciones y Estructuras ===== Ambas cosas son prácticamente los mismo, sirven para pasar datos por valor o por referencia. Los Struct se pasan por valor y los enum por referencia. Suele tener que ver con el rendimiento, cuando algo se usa muy a menudo suele ser una clase, pero cuando es algo más temporal se usan structs y enums. struct cartas{ var rank: Rank var suti: Suit func simpleDescription()->String{ return "the \(rank.simpleDescription()) of \(suit.simpleDescription())" } } enum suit{ case spades, hearts, diamonds clubs//Equivaldrían a caso 0,1,2 y 3. func simpleDescription()->String{ switch self{ case .spades return "spades" case .hearts return "hearts" case .diamonds return "diamonds" case .clubs return "clubs" default: return String(self.rawValue) } } }