SwiftUI
, il framework di Apple per lo sviluppo di interfacce utente, offre un modello di programmazione dichiarativo che rende semplice la creazione di interfacce utente complesse. In questo articolo, esploreremo come utilizzare SwiftUI
per creare un’applicazione che calcola il peso totale di un mazzo di fogli di carta data la dimensione, la grammatura e il numero di fogli.
Questa applicazione può essere molto utile in vari contesti. Ad esempio, può essere utilizzata in un ufficio per stimare il peso di un mazzo di documenti prima di spedirli, o in una tipografia per calcolare il peso di un lotto di carta prima di stamparlo. Inoltre, può essere utilizzata in ambito educativo per insegnare concetti di matematica e fisica, come l’area, la densità e il peso.
import SwiftUI
struct ContentView: View {
@State private var length = ""
@State private var width = ""
@State private var grammage = ""
@State private var numberOfSheets = ""
@State private var weight: String = "0"
var body: some View {
Form {
Section(header: Text("Dimensioni del foglio")) {
TextField("Lunghezza in cm", text: $length, onEditingChanged: { _ in weight = "0" })
.keyboardType(.decimalPad)
TextField("Larghezza in cm", text: $width, onEditingChanged: { _ in weight = "0" })
.keyboardType(.decimalPad)
}
Section(header: Text("Grammatura")) {
TextField("Grammatura in g/m^2", text: $grammage, onEditingChanged: { _ in weight = "0" })
.keyboardType(.decimalPad)
}
Section(header: Text("Numero di fogli")) {
TextField("Numero di fogli", text: $numberOfSheets, onEditingChanged: { _ in weight = "0" })
.keyboardType(.decimalPad)
}
Section(header: Text("Peso totale dei fogli")) {
TextField("", text: $weight)
.disabled(true)
}
Button(action: calculatePaperWeight) {
Text("Calcola Peso")
}
}
}
func calculatePaperWeight() {
guard let length = Double(length), let width = Double(width), let grammage = Double(grammage), let numberOfSheets = Double(numberOfSheets) else {
weight = "0"
return
}
// Convert cm to m
let lengthInM = length / 100
let widthInM = width / 100
let area = lengthInM * widthInM
let weightValue = area * grammage * numberOfSheets
// Convert weight to kilograms
let weightInKg = weightValue / 1000
weight = String(format: "%.2f", weightInKg)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
L’interfaccia utente dell’applicazione è composta da quattro sezioni per l’inserimento dei dati e un pulsante per attivare il calcolo. Le sezioni sono create utilizzando l’oggetto Section
di SwiftUI, che consente di raggruppare logicamente i controlli dell’interfaccia utente. Le prime tre sezioni contengono TextField
per l’inserimento della lunghezza e della larghezza del foglio di carta, la grammatura del foglio e il numero di fogli. La quarta sezione contiene un TextField
disabilitato che visualizza il peso totale dei fogli di carta in chilogrammi.
Il pulsante “Calcola Peso” è creato utilizzando l’oggetto Button
di SwiftUI
. Quando l’utente preme questo pulsante, viene chiamata la funzione calculatePaperWeight
, che calcola il peso totale dei fogli di carta.
SwiftUI
utilizza un modello di gestione dello stato reattivo. In questo caso, utilizziamo la proprietà @State
per creare delle variabili di stato per la lunghezza, la larghezza, la grammatura, il numero di fogli e il peso totale dei fogli. Queste variabili sono collegate ai TextField
corrispondenti nell’interfaccia utente tramite il meccanismo di binding di SwiftUI
, che consente di mantenere sincronizzati lo stato dell’applicazione e l’interfaccia utente.
Il peso totale dei fogli di carta viene calcolato utilizzando la formula:
Peso totale = Area * Grammatura * Numero di fogli
dove l’Area
è calcolata come Lunghezza * Larghezza
(in metri quadrati), la Grammatura
è data in grammi per metro quadrato (g/m^2), e il Numero di fogli
è il numero di fogli nel mazzo. Questo calcolo viene eseguito nella funzione calculatePaperWeight
, che viene chiamata quando l’utente preme il pulsante “Calcola Peso”.