Published on

List asoslari

Authors

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.

Swift
ContentView.swift
import SwiftUI struct ContentView: View { // Oddiy String massivi β€” real ilovada bu model ob'ektlari bo'lardi let kitoblar = ["Swift dasturlash", "SwiftUI asoslari", "iOS arxitekturasi", "Combine framework"] var body: some View { NavigationStack { // List massiv va closure oladi β€” har bir element uchun bir qator List(kitoblar, id: \.self) { kitob in // Closure ichidagi har qanday view qator bo'ladi Text(kitob) } .navigationTitle("Kitoblar") } } }

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)
UslubKo'rinish
.automaticPlatformaga mos standart (default)
.plainAjratuvchi chiziqli oddiy ro'yxat
.insetGroupediOS Sozlamalarga o'xshash guruhli uslub
.sidebarmacOS 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 Identifiable yoki id: 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

SintaksisVazifasi
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.

Buy mea coffee