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 2020Exemple 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.0Exercicis 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.53975Conclusió
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
