Introducció
Les extensions en Swift permeten afegir noves funcionalitats a una classe, estructura, enumeració o protocol existent. Aquesta característica és molt poderosa perquè permet millorar el codi existent sense necessitat de modificar-lo directament. Les extensions poden afegir mètodes, propietats computades, inicialitzadors, subíndexs, tipus interns i conformitat a protocols.
Conceptes Clau
Què poden fer les extensions?
- Afegir mètodes i propietats computades: Les extensions poden afegir nous mètodes i propietats computades a tipus existents.
- Afegir inicialitzadors: Les extensions poden afegir nous inicialitzadors a tipus existents.
- Afegir subíndexs: Les extensions poden afegir subíndexs a tipus existents.
- Afegir conformitat a protocols: Les extensions poden fer que un tipus existent conformi a un protocol, afegint les implementacions necessàries.
Què no poden fer les extensions?
- Afegir propietats emmagatzemades: Les extensions no poden afegir noves propietats emmagatzemades a un tipus existent.
- Afegir inicialitzadors deconvenients: Les extensions no poden afegir inicialitzadors deconvenients a classes que no tenen inicialitzadors designats.
Sintaxi Bàsica
La sintaxi per crear una extensió és molt senzilla. Aquí tens un exemple bàsic:
Exemples Pràctics
Afegir Mètodes
Suposem que tenim una estructura Rectangle
i volem afegir un mètode per calcular l'àrea:
struct Rectangle { var width: Double var height: Double } extension Rectangle { func area() -> Double { return width * height } } let rect = Rectangle(width: 10, height: 5) print("L'àrea del rectangle és \(rect.area())") // L'àrea del rectangle és 50.0
Afegir Propietats Computades
Podem afegir una propietat computada a la mateixa estructura Rectangle
per obtenir el perímetre:
extension Rectangle { var perimeter: Double { return 2 * (width + height) } } print("El perímetre del rectangle és \(rect.perimeter)") // El perímetre del rectangle és 30.0
Afegir Inicialitzadors
Podem afegir un inicialitzador a una estructura existent:
extension Rectangle { init(side: Double) { self.width = side self.height = side } } let square = Rectangle(side: 5) print("L'àrea del quadrat és \(square.area())") // L'àrea del quadrat és 25.0
Afegir Conformitat a Protocols
Suposem que tenim un protocol Descriptible
i volem que Rectangle
el conformi:
protocol Descriptible { func description() -> String } extension Rectangle: Descriptible { func description() -> String { return "Rectangle amb amplada \(width) i alçada \(height)" } } print(rect.description()) // Rectangle amb amplada 10.0 i alçada 5.0
Exercicis Pràctics
Exercici 1: Afegir Mètodes a una Estructura
- Crea una estructura
Circle
amb una propietatradius
de tipusDouble
. - Afegeix una extensió a
Circle
que inclogui un mètodearea
per calcular l'àrea del cercle. - Afegeix una propietat computada
circumference
per calcular la circumferència del cercle.
Solució
struct Circle { var radius: Double } extension Circle { func area() -> Double { return .pi * radius * radius } var circumference: Double { return 2 * .pi * radius } } let circle = Circle(radius: 3) print("L'àrea del cercle és \(circle.area())") // L'àrea del cercle és 28.274333882308138 print("La circumferència del cercle és \(circle.circumference)") // La circumferència del cercle és 18.84955592153876
Exercici 2: Afegir Conformitat a un Protocol
- Defineix un protocol
Identifiable
amb una propietatid
de tipusString
. - Crea una classe
Person
amb propietatsname
iage
. - Afegeix una extensió a
Person
per conformar al protocolIdentifiable
.
Solució
protocol Identifiable { var id: String { get } } class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } } extension Person: Identifiable { var id: String { return "\(name)-\(age)" } } let person = Person(name: "Joan", age: 30) print("L'ID de la persona és \(person.id)") // L'ID de la persona és Joan-30
Conclusió
Les extensions són una eina poderosa en Swift que permeten afegir funcionalitats a tipus existents de manera modular i organitzada. Amb les extensions, pots millorar el teu codi sense necessitat de modificar-lo directament, mantenint així una estructura neta i fàcil de mantenir. Practica amb els exemples i exercicis proporcionats per dominar l'ús de les extensions en Swift.
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