- Published on
Tortib yangilash (pull to refresh)
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Tortib yangilash
Tortib yangilash β foydalanuvchi ro'yxat tepasidan pastga tortib, spinner ko'rib, kontent yangilanadigan harakat. Twitter, Pochta va Yangiliklar ilovalarida minglab marta qilgansiz. SwiftUI-da bu faqat bitta modifikator: .refreshable.
Bu dars qisqa, chunki .refreshable deyarli hamma narsani o'zi qiladi: harakatni boshqaradi, spinner ko'rsatadi va ish tugaguncha yashirmaydi. Sizning ishingiz faqat "yangilash" nima ekanligini tavsiflash.
Oldindan bilish kerak bo'lgan narsa: .refreshable Swift-ning async/await sintaksisidan foydalanadi. To'liq o'rganish Stage 8-da (Tarmoq bilan ishlash). Hozircha pattern qanday ko'rinishini va kalit so'zlar nimani anglatishini bilib olamiz.
@MainActor bilan yangilash
.refreshable {
// @State xususiyatlarini har doim asosiy oqimda yangilang
await maΚΌlumotniYukla()
}
// @MainActor bu funksiya asosiy oqimda ishlashini kafolatlaydi
@MainActor
func maΚΌlumotniYukla() async {
let yangiKitoblar = await APIdan_olish()
kitoblar = yangiKitoblar
}
SwiftUI view-lari asosiy oqimda yangilanishi kerak. Funksiyaga @MainActor qo'yish buni kafolatlaydi. Stage 8-da haqiqiy API-larni chaqirganda bu patternni tez-tez ishlatasiz.
Keng tarqalgan xato: Fon oqimidan
@Stateni yangilash. Agar async funksiyangiz haqiqiy tarmoq ishini bajarib, noto'g'ri oqimdan holatni yangilasa, Xcode da ogohlantirishlar ko'rasiz. Buni tuzatish uchun yangilash funksiyangizda@MainActorishlating. Buning haqida Stage 8 da batafsil.
Tezkor ma'lumotnoma
| Sintaksis | Vazifasi |
|---|---|
.refreshable { await ... } | List yoki ScrollView-ga tortib yangilash qo'shadi |
func nomi() async | Funksiyani asinxron deb belgilaydi β to'xtatilishi mumkin |
await funksiya() | Async funksiya tugashini kutadi |
try? await Task.sleep(for: .seconds(n)) | Async bajarilishini n soniya to'xtatadi β kechikish simulyatsiyasi |
@MainActor | Funksiya asosiy oqimda ishlashini kafolatlaydi β UI yangilanishlari uchun |
Topshiriq: yangilanadigan ro'yxat
@State massiv va List yarating. .refreshable qo'shing. Async funksiyada 1 soniya kutib (Task.sleep), massivga yangi element qo'shing. Simulyatorda tortib yangilashni sinab ko'ring va spinner ko'rinib, keyin yangi element paydo bo'lishini kuzating.