Mobil ishlanmada SwiftUI: bu nima, asosiy tushunchalar va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-07-02 O'qish vaqti: 10 daq
SwiftUI — bu Apple-ning barcha platformalarda interfeyslar yaratish uchun deklarativ freymvorki. Apple SwiftUI Docs (2025) ga ko'ra, App Store dagi yangi ilovalarning 70 foizi SwiftUI dan foydalanadi. SwiftUI ning asosiy tushunchalarini tushunish — View Protocol, @ViewBuilder, NavigationStack — zamonaviy iOS ishlanmasining asosidir.

Asosiy nuqtalar

  • View Protocol — var body: some View. Har bir View View protokoliga mos keladigan struktura. body UI tavsifi.
  • @ViewBuilder — Konteynerlarda bir nechta Views uchun Result Builder. body ichida if/else, switch, ForEach.
  • NavigationStack (iOS 16+) — ma'lumotga asoslangan navigatsiya. path-based, deep linking. NavigationView o'rnini egallaydi.
  • @StateObject — obyekt egaligi. @ObservedObject — kuzatish. @EnvironmentObject — muhit.
  • @FocusState — fokus boshqaruvi. .task{}, .onAppear{} — hayot aylanishi. PreviewProvider — oldindan ko'rish.

Asoslar (View Protocol, body, some View, @ViewBuilder)

View Protocol SwiftUI ning markaziy protokoli. Faqat bitta xususiyat talab qiladi: var body: some View. body UI tavsifini qaytaradigan hisoblangan xususiyatdir. SwiftUI har bir holat o'zgarishida body ni chaqiradi va natijani GPU da render qiladi.

@ViewBuilder

@ViewBuilder Views uchun Result Builder. return va TupleView siz closure ichida bir nechta Views yozishga imkon beradi. if/else, switch, ForEach ni qo'llab-quvvatlaydi. Barcha konteynerlar (VStack, HStack, ZStack, Group) @ViewBuilder dan foydalanadi. Muqobil variant — layout siz guruhlash uchun Group { … }. some View — Opaque Type. Kompilyator aniq View turini (Text, Button, VStack va h.k.) biladi, lekin uni tashqi tomondan some View sifatida qaytaradi. Bu imzoni o'zgartirmasdan body turini o'zgartirishga imkon beradi. ViewModifier — View modifikatori: .font(), .padding(), .background(). ViewModifier protokoli va .modifier() orqali maxsus modifikator.

swift
// @ViewBuilder va NavigationStack bilan View namunasi
struct ContentView: View {
    @State private var items = ["Item 1", "Item 2"]

    var body: some View {
        NavigationStack {
            List(items, id: .self) { item in
                NavigationLink(item) {
                    DetailView(item: item)
                }
            }
            .navigationTitle("Items")
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Add") {
                        items.append("New Item")
                    }
                }
            }
        }
    }
}

// @StateObject bilan DetailView
struct DetailView: View {
    let item: String
    @StateObject private var viewModel = DetailViewModel()

    var body: some View {
        Text(item)
            .task {
                await viewModel.loadDetails(for: item)
            }
    }
}

Modifikatorlar va konteynerlar (ViewModifier, NavigationStack, List, Form)

NavigationStack (iOS 16+) — ma'lumotga asoslangan navigatsiya. Yo'l (hashable qiymatlar massivi) oladi va navigationDestination orqali manzilni ko'rsatadi. Manzil ko'rinishlari bilan NavigationLink o'rnini egallaydi. NavigationLink — stekda navigatsiya qilish tugmasi. List — bo'limlar, surish, o'chirish va sudrab tashlash bilan vertikal ro'yxat. Form — sozlamalar uchun ixtisoslashtirilgan List: bo'limlar, tanlagichlar, kalitlar, matn maydonlari. Section — sarlavha va pastbilgi bilan List/Form da guruhlash. ViewModifier — uslublarni qayta ishlatish uchun maxsus modifikatorlar. .modifier(CustomModifier()) — qo'llash.

List va Form batafsil

List SwiftUI da UITableView ga teng. .onDelete, .onMove, .refreshable ni qo'llab-quvvatlaydi. SwipeActions — .swipeActions { Button("O'chirish", role: .destructive) { } }. Form — sozlamalar uchun optimallashtirilgan: DatePicker, Toggle, Stepper, Picker. Sarlavha/pastbilgi bilan Section — guruhlash uchun. OutlineGroup — iyerarxik ro'yxatlar (bo'limlar bilan UITableView ga teng). DisclosureGroup — mazmun bilan yig'iladigan bo'lim. IT Sectr ma'lumotlar uchun List va sozlamalar uchun Form ni tavsiya qiladi.

PreviewProvider — Xcode Canvas da oldindan ko'rish uchun protokol. Canvas — interaktiv SwiftUI oldindan ko'rishi (@main va Swift 5.9+ talab qiladi). @ScaledMetric — Dynamic Type bilan masshtablanadigan moslashuvchan o'lcham.

Holat boshqaruvi (@StateObject, @ObservedObject, @EnvironmentObject, @FocusState)

Property Wrappers SwiftUI da holat boshqaruvining asosidir. @State — mahalliy holat (qiymat turi). @Binding — ota-ona holatiga ulanish. @StateObject — ObservableObject yaratadi. SwiftUI obyektning hayot aylanishini boshqaradi. @ObservedObject — tashqi ObservableObject ni kuzatadi. @EnvironmentObject — muhitdan obyekt (.environmentObject() orqali bog'liqlik inyeksiyasi). @Environment — tizim qiymatlari (.colorScheme, .locale). @AppStorage — UserDefaults. @FetchRequest — Core Data so'rovi. @FocusState — kiritish fokusi.

O'rovchi Maqsad Egalik
@StateMahalliy holat (qiymat turi)View egalik qiladi
@BindingOta-ona holatiga ulanishOta-ona egalik qiladi
@StateObjectObservableObject yaratadiView egalik qiladi
@ObservedObjectTashqi obyektni kuzatadiTashqi egasi
@EnvironmentObjectMuhitdan obyektAjdod egalik qiladi
@EnvironmentTizim qiymatiTizim
@AppStorageUserDefaultsUserDefaults
@FocusStateKiritish fokusiView egalik qiladi

@StateObject vs @ObservedObject: @StateObject obyekt yaratadi, @ObservedObject uni kuzatadi. Iyerarxiyada birinchi model yaratish uchun @StateObject, bola ko'rinishlarga o'tkazish uchun @ObservedObject dan foydalaning. @FocusState — fokus boshqaruvi: .focused($field, equals: .email). Bir nechta maydonlar uchun enum ni qo'llab-quvvatlaydi.

Muhit qiymatlari va DI

@Environment — tizim qiymatlari: colorScheme, locale, sizeCategory, layoutDirection, managedObjectContext. Maxsus muhit qiymatlari — EnvironmentKey orqali maxsus qiymat. Bog'liqlik inyeksiyasi uchun ishlatiladi: aniq parametrlarsiz xizmatlarni uzatish. .environment() modifikatori — iyerarxiyada qiymat o'rnatadi. @EnvironmentObject — .environmentObject() dan ObservableObject. Malumot turini uzatishi bilan @Environment dan farq qiladi. IT Sectr tizim qiymatlari uchun @Environment va xizmatlar uchun @EnvironmentObject ni tavsiya qiladi.

Hayot aylanishi (.task, .onAppear, .onDisappear)

.task{} — ko'rinish paydo bo'lganda asinxron operatsiya. Yo'qolganda avtomatik bekor qilish. async/await uchun .onAppear o'rnini egallaydi. .onAppear{} — paydo bo'lganda sinxron operatsiya. .onDisappear{} — yo'qolganda operatsiya. .onChange(of:) — qiymat o'zgarishiga reaksiya. .onReceive(Publisher) — Combine nashriyotchisiga reaksiya. SwiftUI da View hayot aylanishi: init → onAppear → body (render) → onDisappear. Holat o'zgarishida: body → diff → qayta render. IT Sectr asinxron yuklash uchun .task va analitika uchun .onAppear ni tavsiya qiladi.

SwiftUI da animatsiya

.animation() — animatsiya modifikatori. .transition() — paydo bo'lish/yo'qolish animatsiyasi. withAnimation — aniq holat o'zgarishi animatsiyasi. matchedGeometryEffect — turli ko'rinishlar o'rtasida animatsiya (hero animatsiyasi). PhaseAnimator (iOS 17+) — enum asosidagi ko'p fazali animatsiya. KeyframeAnimator (iOS 17+) — kadrma-kadr animatsiya. SwiftUI animatsiyalari Core Animation orqali GPU da ishlaydi. IT Sectr tabiiy animatsiyalar uchun .spring() va fizik effektlar uchun .interpolatingSpring ni tavsiya qiladi.

Ma'lumot oqimi (Bindings, @Published, ObservableObject)

ObservableObject — @Published xususiyatli obyektlar uchun protokol. SwiftUI objectWillChange nashriyotchisiga obuna bo'ladi. @Published — xususiyat o'zgarishlarini nashr qiladi. @StateObject — ObservableObject yaratadi, hayot aylanishini boshqaradi. @ObservedObject — tashqini kuzatadi. Combine — reaktiv dasturlash uchun freymvork. @EnvironmentObject — muhit orqali DI. .environmentObject() o'rnatadi, @EnvironmentObject o'qiydi. MVVM — standart arxitektura: View (SwiftUI) — ViewModel (ObservableObject) — Model. IT Sectr asosiy ViewModel lar uchun MVVM + @StateObject ni tavsiya qiladi.

swift
class UserViewModel: ObservableObject {
    @Published var users: [User] = []
    @Published var isLoading = false

    func loadUsers() async {
        isLoading = true
        defer { isLoading = false }
        do {
            users = try await api.fetchUsers()
        } catch {
            print("Xato: \(error)")
        }
    }
}

struct UsersView: View {
    @StateObject private var viewModel = UserViewModel()

    var body: some View {
        List(viewModel.users, id: \.id) { user in
            Text(user.name)
        }
        .task { await viewModel.loadUsers() }
        .overlay {
            if viewModel.isLoading { ProgressView() }
        }
    }
}

Foydalanish qulayligi va mahalliylashtirish

Foydalanish qulayligi SwiftUI da: .accessibilityLabel(), .accessibilityHint(), .accessibilityValue(), .accessibilityAddTraits(). VoiceOver foydalanish qulayligi yorliqlarini o'qiydi. Dynamic Type — @ScaledMetric, @DynamicProperty. Mahalliylashtirish: String(localized:) (SwiftUI + String Catalog). LocalizedStringKey — avtomatik tarjima. Ko'plik qoidalari — String Catalog orqali (one, few, many, other). O'ngdan chapga (arab, ibroniy) — avtomatik qo'llab-quvvatlanadi. .environment(.layoutDirection, .rightToLeft). IT Sectr barcha interaktiv elementlar uchun foydalanish qulayligi yorliqlarini tavsiya qiladi.

swift
struct AccessibleButton: View {
    let action: () -> Void

    var body: some View {
        Button(action: action) {
            Label("Settings", systemImage: "gear")
        }
        .accessibilityLabel("Open Settings")
        .accessibilityHint("Double tap to navigate to settings screen")
        .accessibilityAddTraits(.isButton)
    }
}

// Dynamic Type qo'llab-quvvatlashi
struct ScalableText: View {
    @ScaledMetric private var fontSize: CGFloat = 17

    var body: some View {
        Text("Hello, World!")
            .font(.system(size: fontSize))
    }
}

Diagrammalar va vizualizatsiya (Swift Charts)

Swift Charts (iOS 16+) — diagrammalar yaratish uchun freymvork. Chart { } — asosiy konteyner. BarMark, LineMark, PointMark, AreaMark, RuleMark — belgilar. Ma'lumotlar uchun ForEach. ChartAxis — o'qlarni sozlash. .chartXAxis, .chartYAxis. ChartLegend — afsona. Interpolyatsiya — catmullRom, linear, step. Animatsiya — Chart uchun .animation(). IT Sectr o'rnatilgan diagrammalar uchun Swift Charts va murakkab diagrammalar uchun Charts (DGCharts) ni tavsiya qiladi.

swift
import Charts

struct MonthlySales: Identifiable {
    let id = UUID()
    let month: String
    let sales: Double
}

struct SalesChart: View {
    let data: [MonthlySales]

    var body: some View {
        Chart(data) { item in
            BarMark(
                x: .value("Month", item.month),
                y: .value("Sales", item.sales)
            )
            .foregroundStyle(.blue.gradient)
        }
        .chartXAxisLabel("Month")
        .chartYAxisLabel("Sales")
        .frame(height: 200)
        .padding()
    }
}

Swift Package Manager (SPM) — Apple-ning bog'liqlik menejeri. Xcode ga integratsiyalangan. Qo'llab-quvvatlaydi: ikkilik paketlar, resurslar, testlar, swift-6 qat'iy konkurrentlik. semver tegi bilan GitHub orqali paket nashr qilish. SPM CocoaPods va Carthage o'rnini egallagan Swift bog'liqliklari uchun de-fakto standartdir. IT Sectr barcha yangi loyihalar uchun SPM ni tavsiya qiladi.

Swift Concurrency (async/await, TaskGroup, AsyncSequence) — async/await Swift 5.5+ da o'rnatilgan. Task — asinxronlik birligi. TaskGroup — parallel vazifalar. AsyncSequence — asinxron ketma-ketlik (AsyncStream, AsyncAlgorithms). Task Local Values — Task uchun kontekst ma'lumotlari. Swift Concurrency asinxron operatsiyalar uchun Combine ni to'liq almashtiradi.

Tez-tez so'raladigan savollar

SwiftUI da View Protocol nima?

View Protocol asosiy protokol. var body: some View talab qiladi. body GPU da render qilingan UI tavsifi.

@ViewBuilder nima va nima uchun kerak?

@ViewBuilder bir nechta Views uchun Result Builder. Konteynerlarda if/else, switch, ForEach ga imkon beradi.

@StateObject va @ObservedObject o'rtasidagi farq nima?

@StateObject obyekt yaratadi. @ObservedObject mavjudni kuzatadi. Iyerarxiyada birinchi yaratish uchun @StateObject.

iOS 16+ da NavigationStack nima?

NavigationStack — ma'lumotga asoslangan navigatsiya. path-based, deep linking. NavigationView o'rnini egallaydi.

SwiftUI da @FocusState qanday ishlaydi?

@FocusState — kiritish fokusini boshqarish. .focused() modifikatori. Bir nechta maydonlar uchun enum qo'llab-quvvatlanadi.

Xulosa

  • View Protocol — var body: some View. SwiftUI ning asosi. Har bir View struct.
  • @ViewBuilder — bir nechta Views uchun deklarativ sintaksis. body da if/else, ForEach.
  • NavigationStack (iOS 16+) — zamonaviy navigatsiya. data-driven, path-based.
  • @StateObject — model egaligi. @ObservedObject — kuzatish. @EnvironmentObject — DI.
  • @FocusState — fokus boshqaruvi. Formalar va bir nechta kiritish maydonlari uchun foydali.
  • .task{} — avtomatik bekor qilish bilan asinxron operatsiya. .onAppear{} — sinxron.
  • PreviewProvider va Canvas — Xcode da oldindan ko'rish. @ScaledMetric — moslashuvchan o'lchamlar.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish