Published on

Foydalanuvchi sozlamalar uchun @AppStorage

Authors

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
PreferencesView.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 } } }
QatorVazifasi
@AppStorage("kalit") var qiymat = standartPersistent 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 nilTizim 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

SintaksisVazifasi
@AppStorage("kalit") var x = standartPersistent @State β€” UserDefaults bilan sinxron
$x@State kabi binding sintaksisi
Bir xil kalit = sinxron viewlarKo'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.

Buy mea coffee