- Published on
List asoslari
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Ko'pchilik iOS ilovalarini oching β Pochta, Kontaktlar, Eslatmalar β va markazida aylanuvchan qatorlar ro'yxati bo'ladi. SwiftUI-da bu List. U β UITableView ustida qurilgan, aylanishi mumkin bo'lgan, qatorlardan iborat konteyner, va u qator ajratgichlari, swipe amallari va bo'lim sarlavhalari kabi qurilma-standart xususiyatlarni bepul beradi.
List ikki xil ishlaydi: siz ma'lumot massivi va har bir element uchun view qaytaruvchi closure bering β List qolganini bajaradi. Yoki closure ichiga statik qatorlarni hardcode qiling β List ularni ham boshqaradi.
List va ForEach orasidagi asosiy farq: List β scrollable konteyner bo'lib, qator uslubi va qurilma xususiyatlarini beradi. ForEach β faqat view-larni generate qiladi, scroll yoki konteyner vazifasini bajarmaydi.
List variantlari
Identifiable struct bilan List
struct Kitob: Identifiable {
let id = UUID()
let nomi: String
let muallifi: String
}
// Identifiable bo'lgani uchun id: parametr shart emas
List(kitoblar) { kitob in
VStack(alignment: .leading) {
Text(kitob.nomi).font(.headline)
Text(kitob.muallifi).font(.caption).foregroundStyle(.secondary)
}
}
Struct Identifiable protokolini qabul qilsa, SwiftUI .id xususiyatini o'zi topadi. Real ilovalarda model structlaringizni Identifiable qiling.
Statik List
// Massiv bermay, hardcode qiymatlar bilan statik ro'yxat
List {
Text("Birinchi element")
Text("Ikkinchi element")
Label("Sozlamalar", systemImage: "gear")
}
Sozlamalar ekrani kabi qat'iy, o'zgarmaydigan ro'yxatlar uchun qulay. Dinamik va statik qatorlarni aralashtirib ham ishlatsa bo'ladi.
.listStyle()
List(kitoblar, id: \\.self) { kitob in
Text(kitob)
}
// iOS Sozlamalarga o'xshash yumaloq burchakli guruhli uslub
.listStyle(.insetGrouped)
| Uslub | Ko'rinish |
|---|---|
.automatic | Platformaga mos standart (default) |
.plain | Ajratuvchi chiziqli oddiy ro'yxat |
.insetGrouped | iOS Sozlamalarga o'xshash guruhli uslub |
.sidebar | macOS yoki iPad uchun panel uslubi |
Qator uslumini sozlash
List(kitoblar, id: \\.self) { kitob in
Text(kitob)
// Qatorlar orasidagi ajratuvchi chiziqni yashirish
.listRowSeparator(.hidden)
// Qator fon rangini o'zgartirish
.listRowBackground(Color.blue.opacity(0.1))
}
Statik vs dinamik: Yuqoridagi misol statik ro'yxat β qatorlar to'g'ridan-to'g'ri view ichiga yozilgan. Ko'pchilik haqiqiy ilovalarda massivdan o'qiydigan dinamik ro'yxat ishlatiladi β uni quyidagi bo'limda qurasiz.
Keng tarqalgan xato: Dinamik ro'yxat qurishda
Identifiableyokiid:parametrini unutish. Agar Xcode sizga "initializer" yoki "generic" haqida chalkash xato bersa, avval shuni tekshiring β deyarli har doim yo'qolgan identifikator sabab bo'ladi.
Tezkor ma'lumotnoma
| Sintaksis | Vazifasi |
|---|---|
List(massiv, id: \\.self) { } | Hashable elementlar massivi bilan dinamik ro'yxat |
List(massiv) { } | Identifiable elementlar massivi bilan dinamik ro'yxat |
List { } | Statik qatorlar bilan ro'yxat |
.listStyle(.insetGrouped) | Guruhli iOS uslubi |
.listRowSeparator(.hidden) | Ajratuvchi chiziqni yashiradi |
.listRowBackground(rang) | Qator fon rangini o'zgartiradi |
Topshiriq: kitoblar ro'yxati
Kamida 5 ta kitob ma'lumotini (nomi, muallifi, yili) saqlaydigan Kitob struct yarating. Identifiable protokolini qabul qildiring. List yordamida ularni ko'rsating: har bir qatorda kitob nomi .headline shriftida, muallifi .caption shriftida bo'lsin. .insetGrouped uslubini qo'llang. Simulyatorda tekshiring.