Un'applicazione di qualità premium non deve mostrare schermate bianche o rotelline di caricamento (spinner) quando l'utente si trova in metropolitana o in zone con connettività assente. Il paradigma Offline-First garantisce che l'app carichi istantaneamente i contenuti dalla cache locale (SwiftData), aggiornandoli silenziosamente in background non appena la rete torna disponibile.
1. Il Pattern Cache-Then-Network in SwiftUI
Mostriamo prima i dati memorizzati in SwiftData e poi aggiorniamo la lista via API REST:
import SwiftUI
import SwiftData
@MainActor
public final class FeedRepository: ObservableObject {
@Published public var items: [SoundscapeModel] = []
private var modelContext: ModelContext
public init(context: ModelContext) {
self.modelContext = context
loadFromLocalStorage()
}
public func loadFromLocalStorage() {
let descriptor = FetchDescriptor(sortBy: [SortDescriptor(\.createdAt, order: .reverse)])
self.items = (try? modelContext.fetch(descriptor)) ?? []
}
public func refreshFromRemote() async {
do {
let remoteItems = try await ApiClient.shared.fetchFeed()
for item in remoteItems {
modelContext.insert(item)
}
try? modelContext.save()
loadFromLocalStorage()
} catch {
print("Connessione assente: visualizzazione feed offline")
}
}
}
Vuoi che la tua app funzioni perfettamente anche offline e in condizioni di rete critiche?
Implementiamo architetture dati offline-first con sincronizzazione in background e caching multi-livello.