Tabla de Contenidos

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)
    }
  } 
}