How to Use User Defaults in Swift for Simple Data Storage
Use
UserDefaults.standard to save simple data like strings, numbers, or booleans by calling set(_:forKey:). Retrieve data with object(forKey:) or typed methods like string(forKey:). This stores data persistently across app launches.Syntax
UserDefaults is a simple key-value storage for small data. Use UserDefaults.standard to access the shared defaults object. Save data with set(_:forKey:) and read with object(forKey:) or typed getters like string(forKey:).
set(_: Any?, forKey: String): Saves a value for a key.object(forKey: String) -> Any?: Retrieves a value for a key.string(forKey: String) -> String?: Retrieves a string value.bool(forKey: String) -> Bool: Retrieves a boolean value.
swift
let defaults = UserDefaults.standard // Save a string defaults.set("Hello", forKey: "greeting") // Retrieve a string let greeting = defaults.string(forKey: "greeting")
Example
This example shows how to save a user's name and a flag indicating if they are logged in, then read and print these values.
swift
import Foundation let defaults = UserDefaults.standard // Save data defaults.set("Alice", forKey: "username") defaults.set(true, forKey: "isLoggedIn") // Read data if let username = defaults.string(forKey: "username") { let loggedIn = defaults.bool(forKey: "isLoggedIn") print("User: \(username), Logged In: \(loggedIn)") } else { print("No user found") }
Output
User: Alice, Logged In: true
Common Pitfalls
Common mistakes include:
- Forgetting to use the correct key when reading or writing data.
- Assuming a value exists without checking for
nil. - Storing large or sensitive data in UserDefaults (it's meant for small, simple data).
- Not synchronizing data if needed (usually not required as UserDefaults auto-syncs).
swift
let defaults = UserDefaults.standard // Wrong: reading with a different key let name = defaults.string(forKey: "user_name") // returns nil if key is wrong // Right: use the exact same key defaults.set("Bob", forKey: "username") let correctName = defaults.string(forKey: "username")
Quick Reference
| Method | Description |
|---|---|
| set(_: Any?, forKey: String) | Save a value for a key |
| string(forKey: String) | Get a string value |
| bool(forKey: String) | Get a boolean value |
| integer(forKey: String) | Get an integer value |
| removeObject(forKey: String) | Remove a value for a key |
Key Takeaways
Use UserDefaults.standard to save and retrieve small pieces of data by key.
Always use the exact same key to read and write values to avoid nil results.
Check for nil when reading optional values to avoid crashes.
UserDefaults is not for large or sensitive data; use it only for simple settings.
Data saved in UserDefaults persists across app launches automatically.