Els protocols són una característica fonamental de Swift que permeten definir un conjunt de mètodes, propietats i altres requisits que s'han de complir per qualsevol tipus que vulgui conformar-se a aquest protocol. Els protocols són similars a les interfícies en altres llenguatges de programació com Java o C#.

Conceptes Clau

  1. Definició de Protocols: Un protocol defineix una interfície que altres tipus poden implementar.
  2. Conformitat a Protocols: Un tipus pot conformar-se a un protocol implementant els seus requisits.
  3. Protocols amb Propietats: Els protocols poden requerir propietats específiques.
  4. Protocols amb Mètodes: Els protocols poden requerir mètodes específics.
  5. Protocols Heretats: Un protocol pot heretar d'altres protocols.

Definició de Protocols

Un protocol es defineix utilitzant la paraula clau protocol seguida del nom del protocol i el conjunt de requisits.

protocol Describable {
    var description: String { get }
    func describe() -> String
}

En aquest exemple, el protocol Describable requereix una propietat description de només lectura i un mètode describe() que retorna una cadena.

Conformitat a Protocols

Un tipus pot conformar-se a un protocol implementant els seus requisits. Això es fa afegint el nom del protocol després del nom del tipus, separat per dos punts.

struct Person: Describable {
    var name: String
    var age: Int
    
    var description: String {
        return "\(name), \(age) years old"
    }
    
    func describe() -> String {
        return "Person: \(description)"
    }
}

En aquest exemple, la structura Person conforma al protocol Describable implementant la propietat description i el mètode describe().

Protocols amb Propietats

Els protocols poden requerir propietats específiques. Aquestes propietats poden ser de només lectura o de lectura i escriptura.

protocol FullyNamed {
    var fullName: String { get }
}

struct User: FullyNamed {
    var fullName: String
}

En aquest exemple, el protocol FullyNamed requereix una propietat fullName de només lectura, i la structura User conforma a aquest protocol.

Protocols amb Mètodes

Els protocols poden requerir mètodes específics. Aquests mètodes poden tenir paràmetres i valors de retorn.

protocol RandomNumberGenerator {
    func random() -> Double
}

class LinearCongruentialGenerator: RandomNumberGenerator {
    func random() -> Double {
        return Double(arc4random()) / Double(UInt32.max)
    }
}

En aquest exemple, el protocol RandomNumberGenerator requereix un mètode random() que retorna un Double, i la classe LinearCongruentialGenerator conforma a aquest protocol.

Protocols Heretats

Un protocol pot heretar d'altres protocols, combinant els seus requisits.

protocol Named {
    var name: String { get }
}

protocol Aged {
    var age: Int { get }
}

protocol Person: Named, Aged {}

struct Employee: Person {
    var name: String
    var age: Int
}

En aquest exemple, el protocol Person hereta dels protocols Named i Aged, i la structura Employee conforma al protocol Person.

Exercicis Pràctics

Exercici 1

Defineix un protocol Identifiable que requereixi una propietat id de tipus String. Fes que una structura Product conformi a aquest protocol.

protocol Identifiable {
    var id: String { get }
}

struct Product: Identifiable {
    var id: String
    var name: String
}

Exercici 2

Defineix un protocol Vehicle que requereixi un mètode drive(). Fes que una classe Car conformi a aquest protocol.

protocol Vehicle {
    func drive()
}

class Car: Vehicle {
    func drive() {
        print("Driving a car")
    }
}

Resum

En aquesta secció, hem après sobre els protocols en Swift, incloent com definir-los, com conformar-se a ells, i com utilitzar-los amb propietats i mètodes. Els protocols són una eina poderosa per definir interfícies comunes i assegurar que els tipus conformin a certs requisits, facilitant així la creació de codi modular i reutilitzable.

© Copyright 2024. Tots els drets reservats