Genericele constituie una dintre cele mai puternice facilități ale limbajului Swift, permițând scrierea de funcții, structuri și algoritmi flexibili și reutilizabili, menținând în același timp verificarea strictă a tipurilor la compilare. Odată cu evoluția Swift și a framework-ului SwiftUI, distincția dintre Opaque Types (some) și Existential Types (any) a devenit esențială pentru scrierea de cod performant.
import Foundation
// 1. Funcție generică cu constrângere de tip (Comparable)
func gasesteMaxim<T: Comparable>(in lista: [T]) -> T? {
guard let primul = lista.first else { return nil }
var maxim = primul
for element in lista.dropFirst() {
if element > maxim {
maxim = element
}
}
return maxim
}
let numere = [42, 17, 89, 5, 63]
let maxNumar = gasesteMaxim(in: numere) // Tip dedus automat ca Int?: 89
// 2. Tipuri Opace cu 'some': Compilatorul cunoaște tipul exact, dar îl ascunde apelantului
protocol Vehicul {
func porneste() -> String
}
struct MasinaElectrica: Vehicul {
func porneste() -> String { return "Motor electric silențios activat." }
}
// Returnează un tip opac: performanță maximă (Static Dispatch) fără cost de boxare
func livreazaVehicul() -> some Vehicul {
return MasinaElectrica()
}
// 3. Tipuri Existențiale cu 'any': Polimorfism dinamic (Dynamic Dispatch) la rulare
func inspecteazaFlota(vehicule: [any Vehicul]) {
for v in vehicule {
print(v.porneste())
}
}
De ce folosește SwiftUI ‘some View’?
În SwiftUI, fiecare interfață este compusă ca var body: some View { ... }. Cuvântul cheie some garantează că funcția returnează întotdeauna un singur tip concret de view (ex: VStack<TupleView<(Text, Button)>>) pe care compilatorul îl poate optimiza static fără alocare pe Heap și fără tabela de metode virtuale, oferind randare fluidă la 120 FPS pe ecranele ProMotion.