Vai al contenuto

PROTOCOLLI

Cosa imparerò:

  • CustomStringConvertible
  • Equatable
  • Comparable

Un protocollo definisce le proprietà o i metodi che un oggetto deve avere per completare un compito.

Un protocollo può essere adottato da un altro tipo, e ogni tipo deve essere conforme al protocollo che si vuole utilizzare.

Ci sono diversi protocolli, gli hai già utilizzati per le UITableView (protocolli delegate e dataSource). Alcuni protocolli che ti saranno utili sono:

CustomStringConvertible: permette di controllare come un oggetto viene stampato in console:

class Person: CustomStringConvertible {
    var name: String
    var surname: String
    init(name: String, surname: String) {
        self.name = name
        self.surname = surname
    }
    var description: String {
        return "Utente: \(name) \(surname) si è registrato"
    }
}

Ora la classe Person conforma al protocollo CustomStringConvertible e ha una proprietà description che restituisce una descrizione formattata dell'istanza Person.

Equatable: permette di confrontare delle istanze di un tipo conforme a questo protocollo e controllare se sono uguali.

struct Impiegato: Equatable {
    var nome: String
    var titolo: String
    var cellulare: String
    static func ==(lhs: Impiegato, rhs: Impiegato) -> Bool {
        return lhs.nome == rhs.nome && lhs.titolo == rhs.titolo && lhs.cellulare == rhs.cellulare 
    }
}

Comparable: permette di comparare delle istanze di un tipo conforme a questo protocollo e ordinarle nel modo più opportuno.

struct Impiegato: Comparable {
    var nome: String
    var titolo: String
    var cellulare: String
    static func < (lhs: Impiegato, rhs: Impiegato) -> Bool {
           return lhs.nome < rhs.nome
    }
}

Ritornerà true se il nome del valore a sinistra viene prima del valore a destra alfabeticamente.