Métodos en Swift: de instancia, de tipo y mutating en structs

static se usa en structs y enums (no se puede sobreescribir). class se usa en clases y sí se puede sobreescribir con override:

struct Temperatura {
    var celsius: Double
    static func deFahrenheit(_ f: Double) -> Temperatura {
        Temperatura(celsius: (f - 32) * 5/9)
    }
}

let t = Temperatura.deFahrenheit(212)
print(t.celsius)  // 100.0

class Base {
    class func fabrica() -> Base { Base() }
}
class Hija: Base {
    override class func fabrica() -> Hija { Hija() }
}

mutating en enums

enum Semaforo {
    case rojo, ambar, verde

    mutating func siguiente() {
        switch self {
        case .rojo:   self = .verde
        case .verde:  self = .ambar
        case .ambar:  self = .rojo
        }
    }
}

var s = Semaforo.rojo
s.siguiente()
print(s)  // verde

Método que devuelve self (fluent API)

struct Consulta {
    private var filtros: [String] = []
    private var limite = 100

    func filtrando(por campo: String) -> Consulta {
        var c = self; c.filtros.append(campo); return c
    }
    func limitando(a n: Int) -> Consulta {
        var c = self; c.limite = n; return c
    }
    var sql: String { "SELECT ... WHERE (filtros.joined(separator: " AND ")) LIMIT (limite)" }
}

let q = Consulta().filtrando(por: "activo=1").limitando(a: 10)
print(q.sql)

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP