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
