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
