
L’applicazione sviluppata serve per monitorare e registrare il peso di un utente in un dato giorno. Offre la possibilità di aggiungere nuovi dati, modificarli ed eliminarli. Inoltre, per garantire la privacy dell’utente, si è integrato un sistema di autenticazione biometrica o tramite codice di sblocco del dispositivo.
Il codice sorgente, completo, può essere prelevato qui.
Struttura del Progetto
Il progetto è realizzato interamente in SwiftUI e sfrutta la persistenza dei dati attraverso UserDefaults. La struttura principale è basata su due View: ContentView e EditView.
Modello dei Dati: WeightEntry
Prima di tutto, definiamo un modello per i nostri dati. Utilizziamo una struttura chiamata WeightEntry, che aderisce ai protocolli Identifiable e Codable. Questo ci permette di avere un ID univoco per ogni entry e la possibilità di codificare e decodificare i dati per la memorizzazione.
struct WeightEntry: Identifiable, Codable {
var id = UUID()
var date: Date
var weight: Double
}
ContentView
La ContentView è il cuore dell’app. Questa view gestisce la visualizzazione dei dati, l’aggiunta di nuovi dati, e l’autenticazione dell’utente.
@State private var data: [WeightEntry] = []
@State private var currentDate = Date()
@State private var currentWeight: String = ""
@State private var weightDifference: Double = 0.0
@State private var showingForm = false
@State private var authenticated = false
data: conserva tutte le entry del peso.currentDateecurrentWeight: utilizzati per l’aggiunta di nuovi dati.weightDifference: mostra la differenza di peso tra la prima e l’ultima entry.showingForm: gestisce la visualizzazione del modulo per l’aggiunta di nuovi dati.authenticated: tiene traccia dello stato di autenticazione dell’utente.
Autenticazione
Per l’autenticazione, utilizziamo la classe LocalAuthentication. Questo viene fatto nel metodo authenticate(), che viene chiamato quando la ContentView viene caricata.
Salvataggio e Caricamento dei Dati
Utilizziamo UserDefaults per salvare e caricare i dati. I metodi saveData() e loadData() si occupano di questa parte. Poiché il nostro modello dei dati è conforme al protocollo Codable, possiamo facilmente codificare i nostri dati in un oggetto Data e decodificarli.
Calcolo della Differenza di Peso
La funzione calculateWeightDifference() calcola la differenza di peso tra la prima e l’ultima entry e la memorizza nella variabile weightDifference.
EditView
Questa view è responsabile della modifica delle entry esistenti. Riceve un WeightEntry e una closure updateAction da ContentView, che viene chiamata quando l’utente modifica i dati.
L’app, in sintesi, è un esempio di come si possono utilizzare le potenti funzionalità di SwiftUI e LocalAuthentication per creare un’applicazione utile e sicura. Le scelte progettuali, come l’utilizzo di UserDefaults per la persistenza dei dati e l’adozione della programmazione reattiva, rendono l’app facilmente estensibile e manutenibile.