ماندگاری (Persistence)
اینجا با «UserDefaults» ماندگاری ساده می سازیم. «ماندگاری» یعنی حفظ تنظیمات کوچک. سپس برنامه بعداً همان ها را می خواند. بنابراین تجربه کاربر ثابت می ماند.
UserDefaults API
«UserDefaults» برای تنظیمات سبک است. مثلا نام کاربر یا سوییچ ها. سپس با «@AppStorage» مستقیم به View وصل می شویم.
import SwiftUI
struct UserDefaultsDemo: View {
@AppStorage("username") private var username: String = ""
var body: some View {
VStack(spacing: 12) {
if username.isEmpty {
Text("Hello, Guest")
} else {
Text("Hello, \(username)")
}
TextField("Username", text: $username)
.textFieldStyle(.roundedBorder)
}
.padding()
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
UserDefaultsDemo()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
گام های سریع
- یک «کلید» ساده انتخاب کن.
- با @AppStorage مقدار را وصل کن.
- در View مقدار را نمایش بده.
نکته: برای داده بزرگ سراغ ماندگاری پیشرفته برو. همچنین اسرار را اینجا ذخیره نکن.
App Group Shared Defaults
با «App Group» می توانی بین اپ و ویجت مقدار مشترک بسازی. سپس هر دو یک منبع می خوانند.
import SwiftUI
import Foundation
struct AppGroupDemo: View {
private let suite: UserDefaults = UserDefaults(suiteName: "group.com.example.notes")!
@State private var count: Int = 0
var body: some View {
VStack(spacing: 12) {
Text("Notes count: \(count)")
HStack {
Button("Increment") {
count += 1
suite.set(count, forKey: "notesCount")
}
Button("Load") {
let saved: Int = suite.integer(forKey: "notesCount")
count = saved
}
Button("Clear") {
suite.removeObject(forKey: "notesCount")
count = 0
}
}
}
.task {
let saved: Int = suite.integer(forKey: "notesCount")
count = saved
}
.padding()
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
AppGroupDemo()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
راهنمای تنظیم App Group
- یک App Group در قابلیت ها بساز.
- همان شناسه را در اپ و ویجت فعال کن.
- با suiteName نمونه UserDefaults بگیر.
هشدار: داده حساس را در Keychain نگه دار. بنابراین امنیت بهتر می شود.
جمع بندی سریع
- UserDefaults برای تنظیمات سبک است.
- @AppStorage اتصال مستقیم می دهد.
- App Group داده را بین اکستنشن ها می برد.
- برای حجم بالا از Core Data استفاده کن.