Classi e struct in SwiftUI


"Ma se il concetto di View è un protocollo, posso allora usare anche una classe per definire un nuovo oggetto?"

Sono sicuro che la domanda sopra, sarà sorta a tutti i più curiosi. Proviamo ad analizzarla nel dettaglio.


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

Il codice sopra, sebbene sintatticamente perfetto, produce un errore. Il compilatore, infatti, si lamenta del fatto che la classe di per se è un concetto troppo "mutabile" nel corso dell'esecuzione. Una classe infatti è per sua natura indeterminata. Cosa succederebbe se ContentView avesse a sua volta una sotto classe?

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


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

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

A questo punto - se proprio è necessario - possiamo anche usare una classe per lavorare in SwiftUI.

© Copyright 2019 Sofapps - All Rights Reserved - VAT 05197020877