Vreau să exemplific puterea unui protocol în Swift.
Avem două clase, aparent fără nimic în comun:
class Pescar { var nume : String var numarPermis: String }
class Color { var rosu : Int var verde : Int var albastru : Int }
Vreau să le convertim pe fiecare la String pentru a avea un output decent și corect pentru situații de genul:
print(Pescar(...)) print(Color(...))
Swift implementează un protocol exact pentru acest caz numit CustomStringConvertible. Prin urmare, vom extinde clasele noastre cu ajutorul acestui protocol CustomStringConvertible astfel încât print-ul pe clase sa fie custom:
extension Pescar : CustomStringConvertible { var description : String { get { return "Nume pescar: \(nume) - numar de permis: \(numarPermis)" } } }
extension Color : CustomStringConvertible { var description : String { get { return "Color: \(rosu) - \(verde) - \(albastru)" } } }
Prin urmare, vom avea:
let pescarulGica = Pescar(nume: "Gica", numarPermis: "1234") print(pescarulGica) // Nume pescar: Gica - numar de permis: 1234
și
let codCuloareCustom = Color(rosu: 23, verde: 45, albastru: 52) print(codCuloareCustom) // Color: 23 - 45 - 52