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
- Definició de Protocols: Un protocol defineix una interfície que altres tipus poden implementar.
- Conformitat a Protocols: Un tipus pot conformar-se a un protocol implementant els seus requisits.
- Protocols amb Propietats: Els protocols poden requerir propietats específiques.
- Protocols amb Mètodes: Els protocols poden requerir mètodes específics.
- 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.
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.
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.
Curs de Programació en Swift
Mòdul 1: Introducció a Swift
- Introducció a Swift
- Configuració de l'Entorn de Desenvolupament
- El Teu Primer Programa en Swift
- Sintaxi i Estructura Bàsica
- Variables i Constants
- Tipus de Dades
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Closures
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Closures
- Funcions d'Ordre Superior
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Swift Avançat
Mòdul 6: Swift i Desenvolupament iOS
- Introducció al Desenvolupament iOS
- Conceptes Bàsics de UIKit
- Storyboards i Interface Builder
- Xarxes en Swift
- Core Data
- Conceptes Bàsics de SwiftUI