In questa lezione continuiamo a parlare delle Classi nello specifico vedremo i Protocolli.
Nelle lezioni precedenti abbiamo visto a livello teorico cosa è una classe, un oggetto e l’istanza della classe. Abbiamo visto poi come creare una classe in Swift, i relativi attributi, come gestirli tramite l’Opzionalità e i costruttori, abbiamo visto i metodi di una classe e come utilizzare una classe come tipo di dato, il get e set di una proprietà, l’ereditarietà di una classe e L’extension.
Il protocollo, come la stessa definizione suggerisce, è qualcosa che ci impone di seguire delle specifiche ben precise.
In programmazione, o meglio per il linguaggio Swift, il protocollo ha un’eccezione più larga ed applicabile su più fronti.
Il protocollo in Swift, è un tipo di dato astratto che definisce ciò che una classe qualsiasi è obbligata a contenere, senza imporre una implementazione precisa.
Un protocollo ti dice cosa devi implementare ma non ti da indicazioni del come farlo.
Facciamo un esempio, nostra moglie/madre ci dice di sistemare una stanza.
Quando viene a controllare, sicuramente troverà delle imperfezioni ma non ci può dire nulla perché lei non ci ha detto come farlo ma solo di farlo.
L’esempio è banale ma ci fa capire il concetto dei protocolli.
In Swift la sintassi per creare un protocolo è la seguente:
// Sintassi Protocollo protocol nome { // Contenuto del protocollo }
Ora vediamo un esempio di protocollo
protocol funzioniObbligatoriDaInserire{ func salva() func inserimento() func modifica() func elimina() }
Ora, ma vedrai meglio nel corso IOS capiterà che per utilizzare alcune classi ci venga richiesto di essere conformi a dei protocolli, nel mio esempio ho creato un protocollo personalizzato quindi potrei dire che per creare una determinata classe essa deve essere conforme al mio protocollo, in sostanza dico se vuoi utilizzare questa classe devi obbligatoriamente inserire i metodi di questo protocollo nella classe.
class Persona: funzioniObbligatoriDaInserire { func salva(){ } func inserimento(){ } func modifica(){ } func elimina(){ } }
quindi ho scritto il nome della classe e dopo i due punti il nome del protocollo come per l’ereditarietà. Ora se provi nel playground vedrai che esso ti notificherà errore dicendoti classe non è conforme al protocollo fino a quando non inserirai i metodi presenti nel protocollo nella classe. Con Xcode 9 se adesso clicchi sul pulsante Fix in basso a destra, Xcode in automatico ti inserirà i metodi obbligatori del protocollo, così facendo l’errore sparisce indipendentemente se poi essi verranno utilizzati.
Un protocol ci può forzare anche l’inserimento di variabili e costanti all’interno di una classe.
La particolarità sta nel fatto che ci obbliga a definire se queste debbano essere delle normali proprietà get-set o delle proprietà solo get.
protocol datiSensibili { var nome: String {get set} var codiceFiscale: String {get} } class Persona2: datiSensibili { var nome:String init(nome:String) { self.nome = nome } var codiceFiscale: String{ get{ return "cffffooo(self.nome)" } } }
Una proprietà del protocollo definita con {get set} non deve obbligatoriamente essere di tipo computed property, cioè con l’implementazione del get e set. Una normalissima variabile è già di tipo get-set dato che gli puoi assegnare un nuovo valore (set) e recuperarlo (get).
Per qualunque dubbio o domanda scrivi un commento in questa lezione.