AppStorage و SceneStorage (AppStorage & SceneStorage)
می خواهیم وضعیت های کوچک را نگه داریم. «AppStorage» برای تنظیمات دائمی است. «SceneStorage» برای پیش نویس موقتی هر پنجره است. مثل دفتر مشق و کاغذ یادداشت کنار میز.
تعریف های سریع
AppStorage یعنی اتصال مستقیم مقدار به UserDefaults. بنابراین مقدار پس از بستن برنامه می ماند. SceneStorage یعنی نگهداری وضعیت UI برای هر صحنه. بنابراین با برگشت صحنه، متن برمی گردد.
گام به گام: @AppStorage برای تنظیمات
نام کاربری را ذخیره می کنیم. سپس هر بار برنامه باز شد، همان نام نمایش داده می شود. مانند برچسب روی دفتر.
- کلید را تعریف کن؛ مثلا "username".
- مقدار را به TextField وصل کن.
- نتیجه را در Text ببین.
import SwiftUI
struct AppStorageDemo: View {
@AppStorage("username") private var username: String = ""
var body: some View {
VStack(spacing: 12) {
Text("Hello, \(username.isEmpty ? "Guest" : username)")
TextField("Username", text: $username)
.textFieldStyle(.roundedBorder)
}
.padding()
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
AppStorageDemo()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
گام به گام: @SceneStorage برای پیش نویس صحنه
پیش نویس متن را برای هر پنجره نگه می داریم. بنابراین جابجایی بین پنجره ها متن را گم نمی کند. مثل چسباندن برگه کنار همان میز.
- کلید یکتا برای پیش نویس بده.
- TextEditor را به آن وصل کن.
- میان پنجره ها جابجا شو و بررسی کن.
import SwiftUI
struct SceneStorageDemo: View {
@SceneStorage("draft_note") private var draft: String = ""
var body: some View {
VStack(alignment: .leading, spacing: 8) {
Text("Draft:")
TextEditor(text: $draft)
.frame(minHeight: 120)
.overlay(
RoundedRectangle(cornerRadius: 6)
.stroke(.secondary)
)
}
.padding()
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
SceneStorageDemo()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
جمع بندی سریع
- AppStorage برای تنظیمات پایدار است.
- SceneStorage برای پیش نویس موقتی است.
- کلیدها یکتا و ساده باشند.
- از متن پیش فرض مناسب استفاده کن.
نکته: تنظیمات حساس را در UserDefaults ذخیره نکن. بنابراین امنیت بهتر می ماند.
مسیر بعدی: معماری MVVM و ماندگاری با UserDefaults. همچنین خود AppStorage و SceneStorage را نشانه گذاری کن.