Programmare in SwiftUI: class e struct in SwiftUI

Perché una class non può sostituire direttamente una struct come View in SwiftUI, quale errore dà il compilatore e come una final class risolve il problema.

Read in English

Tradotto dall’inglese con l’aiuto dell’IA e rivisto dall’autore.Leggi l’originale

Due tubi inclinati a forma di segno di spunta, con la loro ombra, su una parete gialla

Sono piuttosto sicuro che a tutti sia venuta in mente, almeno una volta, questa domanda.


"Se il concetto alla base di una View è il protocol, cosa succede se provo a usare una class?"


Proviamo ad analizzarla nel dettaglio.

Swift

class ContentView: View {
   var body: some View {
      Text("Hello World")
   }
}

Il codice qui sopra, pur essendo sintatticamente perfetto, produce un errore. Il compilatore si lamenta del fatto che la class è troppo mutevole durante l'esecuzione. Una class è infatti indeterminata per sua natura: cosa succederebbe se la stessa ContentView avesse una sottoclasse?

Il protocol View non saprebbe come garantire l'unicità. * Self * continuerebbe a riferirsi a ContentView e la sottoclasse violerebbe questa regola.

Swift

class SomeView<T: View> {
   var body: some View {
      Text("Hello World")
   }
}

oppure, più semplicemente:

Swift

final class ContentView: View {
   var body: some View {
      Text("Hello World")
   }
}

A questo punto, se è davvero necessario, possiamo usare una class per lavorare in SwiftUI.

Continua a leggere

Tutti gli articoli
  1. Programmare in SwiftUI: ObjectBinding e BindableObject
  2. Programmare in SwiftUI: introduzione agli stati
  3. Programmare in SwiftUI: introduzione
↑ ↓ naviga↵ apriesc chiudi