- Published on
Foydalanuvchi sozlamalar uchun @AppStorage
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Foydalanuvchi sozlamalari β ilova yopilsa ham saqlanishi kerak bo'lgan konfiguratsiyalar. Qorong'u rejim tanlovi, bildirishnomaga ruxsat, ko'rinish nomi, kirish jarayonini tugatganmi β bular persistentlikni talab qiladi.
9-bosqichda @AppStorage UserDefaults ga avtomatik yozishini o'rganganingiz. Bu darsda uni haqiqiy sozlamalar ekranida ishlatasiz.
Swiftβ’
import SwiftUI
struct SozlamalarKorinishi: View {
// @AppStorage UserDefaults dan avtomatik o'qiydi va yozadi
@AppStorage("userDisplayName") private var displayName = ""
// Bool sozlamasi β ilovalar orasida saqlanadi
@AppStorage("notificationsEnabled") private var notificationsEnabled = false
// Rang sxemasini boshqaruvchi String sozlamasi
@AppStorage("themePreference") private var themePreference = "system"
var body: some View {
Form {
Section("Profil") {
// TextField to'g'ridan-to'g'ri @AppStorage xususiyatiga bog'langan
TextField("Ko'rinish nomi", text: $displayName)
}
Section("Bildirishnomalar") {
// Toggle saqlangan Bool ni to'g'ridan-to'g'ri o'qiydi va yozadi
Toggle("Bildirishnomalarni yoqish", isOn: $notificationsEnabled)
}
Section("Ko'rinish") {
// Picker saqlangan String ni boshqaradi
Picker("Mavzu", selection: $themePreference) {
Text("Tizim").tag("system")
Text("Yorug'").tag("light")
Text("Qorong'u").tag("dark")
}
.pickerStyle(.segmented)
}
}
.navigationTitle("Sozlamalar")
// Foydalanuvchi tanlagan mavzuni butun ko'rinishga qo'llash
.preferredColorScheme(rangSxemasi(themePreference))
}
// Saqlangan String ni SwiftUI ColorScheme ga aylantirish
private func rangSxemasi(_ sozlama: String) -> ColorScheme? {
switch sozlama {
case "light": return .light
case "dark": return .dark
default: return nil // nil = tizim sozlamasiga bo'ysunish
}
}
}
| Qator | Vazifasi |
|---|---|
@AppStorage("kalit") var qiymat = standart | Persistent xususiyat. Kalit UserDefaults da saqlash uchun ishlatiladi. Standart faqat birinchi marta ishlatiladi. |
TextField("...", text: $displayName) | @AppStorage xususiyatiga binding β @State bilan bir xil sintaksis. Har bir tugma bosishda saqlaydi. |
Toggle("...", isOn: $notificationsEnabled) | Saqlangan Bool ni to'g'ridan-to'g'ri boshqaradi. Kalitni almastirganda UserDefaults yangilanadi. |
.preferredColorScheme(rangSxemasi(...)) | Saqlangan tanlanga asosida rang sxemasini qo'llaydi. |
return nil | Tizim rang sxemasiga bo'ysunish. nil = follow system. |
Ko'p viewda ulashish
// SozlamalarKorinishi da
@AppStorage("notificationsEnabled") private var notificationsEnabled = false
// ProfilKorinishi da β bir xil kalit, har doim bir xil saqlangan qiymat o'qiladi
@AppStorage("notificationsEnabled") private var notificationsEnabled = false
// Biri o'zgarsa, bir xil kalitga ega barcha viewlar qayta render qiladi
// Binding uzatish shart emas β kalit o'zi aloqa o'rnatadi
Kalit nomlashtirish
// β
Yaxshi β aniq, namespace qilingan
@AppStorage("com.meningIlovam.notificationsEnabled") var notifications = false
@AppStorage("com.meningIlovam.displayName") var name = ""
// β Yomon β qisqa, collision xavfi
@AppStorage("notifications") var notifications = false
@AppStorage("name") var name = ""
Qo'llab-quvvatlanadigan turlar
@AppStorage("ism") var ism = "" // String
@AppStorage("yoshiRoziman") var yoshi = false // Bool
@AppStorage("ekranDaqiqalar") var daqiqalar = 0 // Int
@AppStorage("balandlik") var balandlik = 1.75 // Double
@AppStorage("xom") var xom = Data() // Data
// RawRepresentable enum
enum Mavzu: String { case system, light, dark }
@AppStorage("mavzu") var mavzu: Mavzu = .system
App Group β widget bilan ulashish
// Widget extension va ilova sozlamalarini ulashish
@AppStorage("widgetYoqildi", store: UserDefaults(suiteName: "group.com.meningIlovam"))
private var widgetYoqildi = false
Tezkor ma'lumotnoma
| Sintaksis | Vazifasi |
|---|---|
@AppStorage("kalit") var x = standart | Persistent @State β UserDefaults bilan sinxron |
$x | @State kabi binding sintaksisi |
| Bir xil kalit = sinxron viewlar | Ko'p view bir xil qiymatni ko'radi va yangilaydi |
store: UserDefaults(suiteName:) | App Group β widget/extension bilan ulashish |
π― Topshiriq: sozlamalar ekrani
Uch xususiyatli sozlamalar ekrani yarating: ism matni maydoni, bildirishnoma toggle va mavzu Picker. Barcha xususiyatlar uchun @AppStorage ishlating. Ilovani yoping va qayta oching β sozlamalar saqlanganini tasdiqlang. Bir xil kalitni boshqa viewda ham ishlating β qiymat o'zgarganda sinxron yangilanishini ko'ring.