Storage & Data
Store small key-value data like user preferences:
// Save
UserDefaults.standard.set("John", forKey: "username")
UserDefaults.standard.set(true, forKey: "isLoggedIn")
UserDefaults.standard.synchronize()
// Load
let username = UserDefaults.standard.string(forKey: "username") ?? ""
let isLoggedIn = UserDefaults.standard.bool(forKey: "isLoggedIn")
Apple's object graph and persistence framework for complex data models:
// Fetch all users
let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
do {
let users = try context.fetch(fetchRequest)
print("Found \(users.count) users")
} catch {
print("Fetch failed: \(error)")
}
// Create a new user
let user = User(context: context)
user.name = "Alice"
user.age = 30
// Save
do {
try context.save()
} catch {
print("Save error: \(error)")
}
Lightweight relational database storage (third-party libraries):
// GRDB example
import GRDB
let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")
try dbQueue.write { db in
try db.execute(sql: "CREATE TABLE IF NOT EXISTS items (" +
"id INTEGER PRIMARY KEY, name TEXT)")
try db.execute(sql: "INSERT INTO items (name) VALUES (?)",
arguments: ["Sample Item"])
}
let items = try dbQueue.read { db in
try Row.fetchAll(db, sql: "SELECT * FROM items")
}
Read/write files in the app's sandbox:
let fileManager = FileManager.default
let documentsURL = try fileManager.url(for: .documentDirectory,
in: .userDomainMask, appropriateFor: nil, create: false)
let fileURL = documentsURL.appendingPathComponent("data.txt")
// Write
try "Hello, iOS!".write(to: fileURL, atomically: true,
encoding: .utf8)
// Read
let content = try String(contentsOf: fileURL, encoding: .utf8)
Apple's cloud storage service for syncing data across devices:
import CloudKit
let container = CKContainer.default()
let database = container.privateCloudDatabase
let record = CKRecord(recordType: "Note")
record["title"] = "My Cloud Note"
record["content"] = "This syncs across devices!"
database.save(record) { savedRecord, error in
if error == nil {
print("Saved to iCloud!")
}
}