En aquest tema, explorarem les classes i les estructures en Swift, dues de les construccions fonamentals per a la programació orientada a objectes. Aprendrem les seves diferències, com definir-les, i com utilitzar-les en els nostres programes.
Continguts
Introducció a les Classes i Estructures
Les classes i les estructures són dues maneres de definir tipus de dades personalitzats en Swift. Ambdues poden contenir propietats i mètodes per definir el comportament i les característiques dels objectes que representen.
Característiques Comunes
- Propietats: Variables o constants associades a la classe o estructura.
- Mètodes: Funcions associades a la classe o estructura.
- Inicialitzadors: Funcions especials per crear instàncies de la classe o estructura.
- Extensions: Permeten afegir funcionalitats addicionals.
- Protocols: Definicions de funcionalitats que poden ser adoptades per classes o estructures.
Definició de Classes
Les classes són tipus de referència, el que significa que les instàncies de classes es passen per referència. Això vol dir que quan assignem una instància de classe a una variable o constant, estem treballant amb una referència a l'objecte original.
Sintaxi de Classes
class Persona { var nom: String var edat: Int init(nom: String, edat: Int) { self.nom = nom self.edat = edat } func saludar() { print("Hola, em dic \(nom) i tinc \(edat) anys.") } }
Exemple d'Ús
let persona1 = Persona(nom: "Joan", edat: 30) persona1.saludar() // Sortida: Hola, em dic Joan i tinc 30 anys. let persona2 = persona1 persona2.nom = "Anna" persona1.saludar() // Sortida: Hola, em dic Anna i tinc 30 anys.
Definició d'Estructures
Les estructures són tipus de valor, el que significa que les instàncies d'estructures es passen per valor. Això vol dir que quan assignem una instància d'estructura a una variable o constant, estem treballant amb una còpia de l'objecte original.
Sintaxi d'Estructures
Exemple d'Ús
var punt1 = Punt(x: 10, y: 20) print(punt1.descripcio()) // Sortida: Punt a (10, 20) var punt2 = punt1 punt2.x = 30 print(punt1.descripcio()) // Sortida: Punt a (10, 20) print(punt2.descripcio()) // Sortida: Punt a (30, 20)
Comparació entre Classes i Estructures
Característica | Classes | Estructures |
---|---|---|
Tipus | Referència | Valor |
Herència | Sí | No |
Inicialitzadors | Personalitzats i per defecte | Per defecte i personalitzats |
Passat per | Referència | Valor |
Extensions | Sí | Sí |
Protocols | Sí | Sí |
Exemples Pràctics
Exemple 1: Classe de Cotxe
class Cotxe { var marca: String var model: String var any: Int init(marca: String, model: String, any: Int) { self.marca = marca self.model = model self.any = any } func descripcio() -> String { return "\(marca) \(model) del \(any)" } } let cotxe1 = Cotxe(marca: "Toyota", model: "Corolla", any: 2020) print(cotxe1.descripcio()) // Sortida: Toyota Corolla del 2020
Exemple 2: Estructura de Rectangle
struct Rectangle { var ample: Double var alt: Double func area() -> Double { return ample * alt } } let rectangle1 = Rectangle(ample: 5.0, alt: 10.0) print("Àrea del rectangle: \(rectangle1.area())") // Sortida: Àrea del rectangle: 50.0
Exercicis Pràctics
Exercici 1: Definir una Classe de Llibre
Defineix una classe Llibre
amb les propietats titol
, autor
i numPagines
. Afegeix un mètode descripcio
que imprimeixi una descripció del llibre.
class Llibre { var titol: String var autor: String var numPagines: Int init(titol: String, autor: String, numPagines: Int) { self.titol = titol self.autor = autor self.numPagines = numPagines } func descripcio() -> String { return "\(titol) escrit per \(autor) té \(numPagines) pàgines." } } // Solució let llibre1 = Llibre(titol: "1984", autor: "George Orwell", numPagines: 328) print(llibre1.descripcio()) // Sortida: 1984 escrit per George Orwell té 328 pàgines.
Exercici 2: Definir una Estructura de Cercle
Defineix una estructura Cercle
amb la propietat radi
. Afegeix un mètode area
que calculi l'àrea del cercle.
struct Cercle { var radi: Double func area() -> Double { return 3.14159 * radi * radi } } // Solució let cercle1 = Cercle(radi: 5.0) print("Àrea del cercle: \(cercle1.area())") // Sortida: Àrea del cercle: 78.53975
Conclusió
En aquest tema, hem après a definir i utilitzar classes i estructures en Swift. Hem vist les seves diferències clau i com triar entre elles segons les necessitats del nostre programa. A més, hem practicat amb exemples i exercicis per reforçar els conceptes apresos. En el proper tema, explorarem les propietats i els mètodes en més detall.
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