What is UserDefaults and when should you use it?
Answer
UserDefaults is a simple key-value persistent store for small amounts of data — user preferences, app settings, flags. It persists across app launches and is synchronized to disk automatically. Basic usage: // Save: UserDefaults.standard.set(true, forKey: "hasSeenOnboarding") UserDefaults.standard.set("Alice", forKey: "username") UserDefaults.standard.set(42, forKey: "launchCount") UserDefaults.standard.set(Date(), forKey: "lastOpenDate") // Read: let hasSeenOnboarding = UserDefaults.standard.bool(forKey: "hasSeenOnboarding") let username = UserDefaults.standard.string(forKey: "username") // nil if not set let count = UserDefaults.standard.integer(forKey: "launchCount") // Delete: UserDefaults.standard.removeObject(forKey: "username"). Custom objects (Codable): struct Settings: Codable { var theme: String var notificationsEnabled: Bool } let data = try! JSONEncoder().encode(settings) UserDefaults.standard.set(data, forKey: "settings") // Read: if let data = UserDefaults.standard.data(forKey: "settings") { let settings = try! JSONDecoder().decode(Settings.self, from: data) }. @AppStorage (SwiftUI): property wrapper for UserDefaults: @AppStorage("hasSeenOnboarding") var hasSeenOnboarding = false @AppStorage("username") var username = "". Property wrapper for UIKit: @propertyWrapper struct Stored<T> { let key: String; let defaultValue: T var wrappedValue: T { get { UserDefaults.standard.object(forKey: key) as? T ?? defaultValue } set { UserDefaults.standard.set(newValue, forKey: key) } } } @Stored(key: "count", defaultValue: 0) var count: Int. When NOT to use: sensitive data (use Keychain), large data (use files/Core Data), complex queries (use Core Data). Limit: best for simple types and small data.
Previous
What is NSURLSession and networking in iOS?
Next
What is the Keychain and when do you use it?