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.0Afegir 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.0Afegir 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.0Afegir 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.0Exercicis Pràctics
Exercici 1: Afegir Mètodes a una Estructura
- Crea una estructura
Circleamb una propietatradiusde tipusDouble. - Afegeix una extensió a
Circleque inclogui un mètodeareaper calcular l'àrea del cercle. - Afegeix una propietat computada
circumferenceper 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.84955592153876Exercici 2: Afegir Conformitat a un Protocol
- Defineix un protocol
Identifiableamb una propietatidde tipusString. - Crea una classe
Personamb propietatsnameiage. - Afegeix una extensió a
Personper 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-30Conclusió
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
