SwiftUI: bu nima, asosiy tushunchalar va View Protocol

Muallif: IT Sectr Nashr etilgan: 2026-04-30 O'qish vaqti: 8 daq

SwiftUI — bu Apple ekotizimining barcha platformalarida foydalanuvchi interfeyslarini yaratish uchun deklarativ freymvorkdir. Imperativ qadamlarni tasvirlash o'rniga, dasturchi interfeys qanday ko'rinishi kerakligini e'lon qiladi, SwiftUI esa uni ko'rsatish va yangilashni boshqaradi. Apple Developer Documentation (2025) ma'lumotlariga ko'ra, SwiftUI iOS 15+, iPadOS 15+, macOS 12+, watchOS 8+ va tvOS 15+ ni qo'llab-quvvatlaydi va interfeysning barcha komponentlari uchun asosiy qurilish bloki sifatida View Protocol dan foydalanadi.

Asosiy fikrlar

  • SwiftUI — Apple-ning deklarativ freymvorki, unda dasturchi interfeysni tasvirlaydi va yangilanishlar avtomatik ravishda amalga oshiriladi.
  • View Protocol body xususiyati bilan — SwiftUI-dagi har bir UI komponentining asosi, view-lar kompozitsiyasi orqali ekran tavsifini qaytaradi.
  • Property Wrappers — @State, @Binding, @ObservedObject, @StateObject — holatni boshqaradi va ma'lumot o'zgarganda qayta chizishni boshlaydi.
  • NavigationStack (iOS 16+) — tip-xavfsiz marshrutlar va deklarativ o'tishlar bilan zamonaviy navigatsiya API-si.
  • Modifier — sinf merosisiz view-larning ko'rinishi va xatti-harakatlarini sozlash uchun chaqiriqlar zanjiri.

SwiftUI nima?

SwiftUI — Apple tomonidan 2019-yilda yangi loyihalarda UIKit o'rnini bosish uchun taqdim etilgan deklarativ freymvorkdir. UIView namunalarini qo'lda yaratish va ularni iyerarxiyaga qo'shish o'rniga, dasturchi View protokolini amalga oshiruvchi tuzilmalar orqali interfeysni tavsiflaydi. SwiftUI avtomatik ravishda joriy va yangi holat o'rtasidagi farqni hisoblab chiqadi va o'zining renderlash dvigatelidan foydalanib, faqat o'zgargan qismlarni qayta chizadi.

Freymvork Swift tilida value semantics (sinflar emas, tuzilmalar) yordamida yozilgan, bu UI komponentlarini engil va thread-xavfsiz qiladi. UIKit-da UIViewController Objective-C runtime sababli 200+ bayt bo'lishi mumkin bo'lsa, SwiftUI View bir necha bayt o'lchamdagi oddiy tuzilmadir. Bu, ayniqsa, cheklangan xotiraga ega watchOS uchun muhimdir.

SwiftUI-ning ko'p platformaliligi

Xuddi shu View tavsifi iPhone, iPad, Mac, Apple Watch, Apple TV va Apple Vision Pro da ishlaydi. SwiftUI interfeysni platformaga moslashtiradi: iOS da — sensorli imo-ishoralar, macOS da — klaviatura yorliqlari, watchOS da — Digital Crown aylantirish. Bu Apple-ning bir nechta platformalari uchun ilovalar chiqaradigan kompaniyalar uchun ishlab chiqish vaqtini qisqartiradi, ammo har bir platformaning o'ziga xos elementlari uchun qo'shimcha sozlashni talab qiladi.

View Protocol va ko'rinish tanasi

SwiftUI-da har bir ekran View protokolini amalga oshiruvchi tuzilmadir, yagona talab: some View tipidagi computed xususiyat body. some kalit so'zi (opaque type) view-ning aniq turini yashiradi, SwiftUI-ga renderlashni optimallashtirishga imkon beradi. Body ichida dasturchi tayyor komponentlarni — Text, Image, Button, List — ViewBuilder yordamida birlashtiradi, u bir nechta view-ni bittaga yig'adi.

swift
struct GreetingView: View {
    let name: String

    var var body: some View {
        VStack {
            Text("Salom, \(name)!")
                .font(.title)
                .foregroundColor(.blue)
            Image(systemName: "hand.wave")
                .imageScale(.large)
        }
        .padding()
    }
}

Misolda VStack (vertikal stack) Text va Image ni o'z ichiga oladi. name qiymati tuzilma initsializatori orqali uzatiladi — SwiftUI-da tashqi DI konteynerlarsiz DI (Dependency Injection) shunday ishlaydi. Har bir modifier asl nusxani mutatsiya qilmasdan o'zgartirish qo'llanilgan yangi view-ni qaytaradi. Bu value-tiplarning o'zgarmasligi (immutability) tufayli mumkin.

ViewBuilder va shartli ifodalar

ViewBuilder@resultBuilder bilan belgilangan result builder, 10 tagacha view-ni bittaga yig'adi. Body ichida if/else, switch va ForEach qo'shimcha o'ramlarsiz ishlatilishi mumkin. ForEach Identifiable elementlar bilan ishlaydi — har bir view qo'shish/o'chirish vaqtida to'g'ri animatsiya uchun noyob id oladi.

Holatni boshqarish: @State, @Binding, @ObservedObject

SwiftUI-da holat ekranda qanday kontent ko'rsatilishini aniqlaydi. Holat o'zgarganda, SwiftUI bog'liq view-ning body-sini qayta yaratadi va natijani oldingi bilan taqqoslab, diff algoritmini qo'llaydi. Holatni saqlash uchun property wrappers ishlatiladi — har biri o'z vazifasini hal qiladi: lokal holat, bola view bilan bog'lanish yoki tashqi ma'lumot modeli.

swift
struct CounterView: View {
    @State private var count = 0

    var var body: some View {
        VStack {
            Text("Hisoblagich: \(count)")
            Button("Oshirish") {
                count += 1
            }
        }
    }
}

class UserViewModel: ObservableObject {
    @Published var name = ""
    @Published var age = 0
}

@State View tuzilmasi ichida lokal oddiy qiymatni (Int, String, Bool) saqlaydi. SwiftUI xotirani tuzilmadan alohida omborga chiqaradi — shuning uchun @State bilan xususiyatni o'zgartirish (mutatsiya qilish) mumkin, hatto View value-tip bo'lsa ham. @ObservableObject@Published xususiyatlari bo'lgan sinflar uchun, ularning o'zgarishlari avtomatik ravishda SwiftUI-ni qayta chizish zarurligi haqida xabardor qiladi.

@Binding va ota-bola aloqasi

@Binding ota view-da joylashgan ma'lumot manbai bilan ikki tomonlama aloqa yaratadi. Ota $variable (projected value) ni uzatadi, bola binding orqali qiymatni o'qiydi va yozadi. Bu matn kiritish yoki kalitni alohida komponentga chiqarishga imkon beradi, holatni otada saqlaydi. @Binding bo'lmasa, har bir o'zgarish yangi qiymatni yuqoriga uzatish uchun callback yopilishini talab qiladi.

iOS 16 dan oldin SwiftUI-da navigatsiya NavigationView ga asoslangan edi — iPad da murakkab xatti-harakatga ega (split view, double column) eskirgan API. iOS 16 dan boshlab Apple NavigationStack ni tavsiya qiladi — tip-xavfsiz marshrutlar bilan soddalashtirilgan alternativa. Dasturchi mumkin bo'lgan marshrutlarning enum ini aniqlaydi, NavigationStack esa chuqur havolalar va ildizga qaytishni qo'llab-quvvatlagan holda avtomatik ravishda ekranlar stekini boshqaradi.

swift
enum Route: Hashable {
    case detail(id: Int)
    case settings
}

struct ContentView: View {
    var var body: some View {
        NavigationStack {
            List {
                NavigationLink("Tafsilot ekrani",
                               value: Route.detail(id: 42))
                NavigationLink("Sozlamalar",
                               value: Route.settings)
            }
            .navigationDestination(for: Route.self) { route in
                switch route {
                case .detail(let id): DetailView(id: id)
                case .settings: SettingsView()
                }
            }
        }
    }
}

Route tipidagi marshrutlar: Hashable parametrlarni uzatish uchun istalgan ma'lumot turidan foydalanishga imkon beradi. navigationDestination(for:destination:) marshrut turini maqsadli view bilan bog'laydi. UIKit navigatsiyasiga nisbatan afzallik: yangi marshrut qo'shishda qayta chizish talab qilinmaydi — enum ga case va switch da ishlovchi qo'shish kifoya. Chuqur havolalar NavigationStack da processDeepLink orqali qayta ishlanadi.

Programma Navigatsiyasi

Programma o'tish uchun (kirishdan so'ng, taymer yoki server javobidan keyin) NavigationLink initsializatori bilan @State ishlatiladi: NavigationLink(isActive: $isActive). isActive = true qo'yilganda, o'tish foydalanuvchi tegmagan holda amalga oshiriladi. Alternativ — NavigationStack da $path massivining binding i: $path.append(Route.detail(id: 1)).

View Modifier — ko'rinishni sozlash

Modifier — o'zgartirilgan view nusxasini qaytaradigan metod. UIKit-da xususiyatlarni sozlash mavjud view-ni mutatsiya qilish orqali amalga oshirilsa, SwiftUI o'zgartirish qo'llanilgan yangi qiymat yaratadi. Modifikatorlar zanjiri (chaining) ketma-ket o'zgartirishlardan yakuniy interfeysni quradi: shrift → bo'shliq → rang → soya → imo-ishora.

Apple 200 dan ortiq o'rnatilgan modifikatorni taqdim etadi. Eng keng tarqalganlari: .font(), .foregroundColor(), .padding(), .background(), .cornerRadius(), .shadow(), .opacity(), .offset(). Modifikatorlarning tartibi muhim: .padding() .background() dan oldin bo'shliq bilan maydonni bo'yaydi, keyin — faqat ichki maydonni. Maxsus modifikatorlar ViewModifier protokoli orqali yaratiladi.

Shartli modifikatorlar va animatsiya

Modifikatorlar shartli ravishda ternary operatori orqali qo'llanilishi mumkin: .foregroundColor(isError ? .red : .primary). Animatsiya uchun .animation(.easeInOut, value: state) ishlatiladi — animatsiya modifikatori holatning ma'lum bir xususiyatiga bog'lanadi. Bu xususiyat o'zgarganda, SwiftUI eski va yangi qiymat o'rtasidagi o'tishni animatsiya qiladi. Animatsiya opacity, offset, scale, rotation, o'lcham va rang bilan ishlaydi — har bir xususiyat uchun tegishli AnimatableParameter belgilangan.

Maxsus animatsiyalar uchun .transition (paydo bo'lish/yo'qolish) va .matchedGeometryEffect (elementning ikki konteyner o'rtasida silliq o'tishi) mavjud. Ikkinchisi ro'yxatlarda hero-animatsiya uchun ishlatiladi: ro'yxat katagidagi belgi tafsilot ekranida katta rasmga silliq aylanadi.

SwiftUI vs UIKit: yondashuvlarni taqqoslash

SwiftUI va UIKit o'rtasidagi tanlov iOS dasturchisining birinchi dilemmalaridan biridir. Ikkala freymvork ham Apple tomonidan qo'llab-quvvatlanadi, ammo interfeys qurish vazifasini tubdan farqli usullar bilan hal qiladi: SwiftUI deklarativ, UIKit imperativ. Farq holatni boshqarish, navigatsiya, ishlash va moslikda namoyon bo'ladi.

AspektSwiftUIUIKit
YondashuvDeklarativ: nimani ko'rsatishImperativ: qanday qurish
HolatProperty Wrappers, avtomatik qayta chizishQo'lda: reloadData, setNeedsLayout
UI kodiYig'ma, modifikator zanjirlariHajmli, NSCoder/Storyboard/cheklovlar
IshlashiOS 17+ yuqori, diff algoritmiiOS 12–16 cho'qqi, to'g'ridan-to'g'ri nazorat
Minimal versiyaiOS 15+ (to'liq qo'llab-quvvatlash)iOS 2+ (barcha versiyalar)

Minimal versiyasi iOS 17 bo'lgan yangi loyihalar uchun Apple SwiftUI ni asosiy freymvork sifatida tavsiya qiladi. UIKit render ustida nozik nazorat talab qiladigan interfeyslar (maxsus UICollectionViewLayout, murakkab CAAnimation sahnalari) yoki iOS 12–14 ni qo'llab-quvvatlash uchun zarur bo'lib qoladi. Ko'plab loyihalar gibrid yondashuvdan foydalanadi: SwiftUI UIHostingController orqali UIKit ilovasiga o'rnatiladi, UIViewRepresentable esa UIKit komponentlarini SwiftUI iyerarxiyasi ichida ishlatishga imkon beradi.

Tez-tez beriladigan savollar

Bir loyihada SwiftUI va UIKit ni birgalikda ishlatish mumkinmi?

Ha, UIHostingController (SwiftUI UIKit da) va UIViewRepresentable (UIKit SwiftUI da) orqali. Bu migratsiya paytida mashhur bo'lgan gibrid yondashuv.

SwiftUI loyihasini qaysi iOS versiyasidan boshlash kerak?

iOS 17 — to'liq funksionallik: NavigationStack, Observation framework, Swift Charts. iOS 15 — ishlab chiqarish uchun minimal chegara.

Nima uchun SwiftUI ba'zan interfeysni yangilamaydi?

Eng ko'p uchraydigan sabab @Published xususiyatining fon ipida o'zgartirilishi. ObservableObject o'zgarishlarni main actor ga yuborishi kerak: @MainActor class ViewModel.

SwiftUI da kechikish bilan tugmani bosishni qanday boshqarish mumkin?

.debounce Combine orqali foydalaning: Button.publisher(for: .tap) .debounce(for: .seconds(0.3), scheduler: RunLoop.main).

SwiftUI maxsus imo-ishoralarni qo'llab-quvvatlaydimi?

Ha, Gesture modifikatorlari orqali: DragGesture, LongPressGesture, MagnificationGesture, RotationGesture. Ularni .simultaneousGesture() va .sequenced() orqali birlashtiring.

Xulosa

  • SwiftUI — Apple-ning deklarativ freymvorki, unda interfeys holatni boshqarish uchun property wrappers bilan View tuzilmalarining kompozitsiyasi sifatida tasvirlanadi.
  • View Protocol computed xususiyat body bilan — har bir view uchun yagona kirish nuqtasi. ViewBuilder 10 tagacha view-ni keraksiz konteynerlarsiz bittaga yig'adi.
  • @State, @Binding va @ObservedObject ma'lumotlarni boshqarishning barcha stsenariylarini qamrab oladi: lokal holat, ota-bola aloqasi va tashqi modellar.
  • NavigationStack tip-xavfsiz enum marshrutlari bilan NavigationView ni almashtirdi, chuqur havolalar va programma navigatsiyasini qo'llab-quvvatlashni qo'shdi.
  • Modifier — SwiftUI ning asosiy namunasi, merossiz view-larning ko'rinishini chaqiriqlar zanjiri orqali sozlashga imkon beradi.
  • SwiftUI va UIKit UIHostingController va UIViewRepresentable orqali birga mavjud bo'lib, loyihani bosqichma-bosqich migratsiya qilishga imkon beradi.
  • iOS 17+ uchun Apple SwiftUI ni asosiy freymvork sifatida tavsiya qiladi; UIKit murakkab maxsus interfeyslar va eski versiyalarni qo'llab-quvvatlash uchun qoladi.

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

Shuningdek o'qing