Bosh sahifa Wiki SwiftUI

SwiftUI

SwiftUI — Apple platformalarida foydalanuvchi interfeysini deklarativ usulda yaratish uchun mo‘ljallangan framework. Developer ekranda qaysi elementlar ko‘rinishi kerakligini state asosida yozadi, framework esa bu state o‘zgarganda interfeysning zarur qismlarini yangilaydi. SwiftUI iOS, macOS, watchOS, tvOS va visionOS loyihalarida qo‘llanadi.

SwiftUI Swift tilining type systemi, property wrapperlari va result builder imkoniyatlaridan foydalanadi.

Deklarativ interfeys

Imperativ UI’da developer view yaratish, property o‘zgartirish va hierarchy’ni boshqarishni ketma-ket bajaradi. SwiftUI’da esa joriy holat uchun interfeys tavsiflanadi:

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

    var body: some View {
        Button("Count: \(count)") {
            count += 1
        }
    }
}

count o‘zgarsa body qayta baholanadi.

View protokoli

SwiftUI componentlari View protokoliga mos keladi.

Asosiy talab:

var body: some View

body boshqa viewlardan tuzilgan hierarchy qaytaradi.

View odatda value type bo‘lgan struct sifatida yoziladi.

View identity

SwiftUI view structure’ni har renderda oddiy object tree sifatida saqlamaydi. Framework view identity, type va joylashuv orqali state’ni qaysi elementga tegishli ekanini aniqlaydi.

Conditional branch yoki list identity noto‘g‘ri bo‘lsa state kutilmaganda reset bo‘lishi mumkin.

State

@State view ichidagi local mutable holatni saqlaydi.

U oddiy stored propertydan farqli ravishda SwiftUI storage tizimiga ulanadi.

State faqat shu viewga tegishli bo‘lishi kerak.

Tashqi model yoki shared data uchun boshqa property wrapper ishlatiladi.

Binding

@Binding boshqa joyda saqlanadigan state’ga ikki tomonlama access beradi.

Child view qiymatni ko‘radi va o‘zgartiradi, lekin storage egasi emas.

Masalan, form field parent viewdagi textga binding olishi mumkin.

Binding ownership va data flow’ni aniq saqlaydi.

Observable model

Murakkab application state observable object yoki yangi observation tizimi bilan boshqarilishi mumkin.

Model o‘zgarganda unga bog‘langan view yangilanadi.

Model:

  • business state;
  • loading;
  • error;
  • selected item;
  • fetched data

ni saqlashi mumkin.

Network va persistence logikasi to‘g‘ridan-to‘g‘ri body ichida yozilmaydi.

Environment

Environment view hierarchy bo‘ylab umumiy qiymatlarni uzatadi.

Misollar:

  • color scheme;
  • locale;
  • dismiss action;
  • managed object context;
  • custom dependency.

Har childga parameter uzatishni kamaytiradi.

Yashirin dependency ko‘payib ketmasligi uchun custom environment qiymatlar hujjatlashtiriladi.

Layout

SwiftUI layout containerlari:

  • VStack;
  • HStack;
  • ZStack;
  • Grid;
  • List;
  • ScrollView.

Parent childga mavjud o‘lchamni taklif qiladi, child o‘z o‘lchamini qaytaradi va parent joylashtiradi.

Modifier tartibi layout natijasiga ta’sir qiladi.

Modifier

Modifier view’ning ko‘rinishi yoki behaviorini o‘zgartiradi:

Text("UzbekDevs")
    .font(.headline)
    .padding()

Har modifier asl view’ni mutatsiya qilmay, yangi view value yaratadi.

padding().background() va background().padding() boshqa natija beradi.

NavigationStack route va screenlar orasidagi o‘tishni boshqaradi.

Navigation path programmatik flow uchun ishlatilishi mumkin.

Deep link route’ga aylantiriladi.

Navigation state restoration va platforma versioniga mos kelishi kerak.

List

List katta ma’lumot to‘plamini platformaga mos scroll qilinadigan ko‘rinishda beradi.

Har element stable identityga ega bo‘lishi kerak.

Indexni identity sifatida ishlatish insert yoki reorder paytida noto‘g‘ri animation va statega olib kelishi mumkin.

Async task

View .task modifieri orqali asynchronous ish boshlashi mumkin.

View identity yo‘qolsa task cancellation qilinishi ehtimoli bor.

Network natijasi main actor va joriy state bilan xavfsiz bog‘lanadi.

Bir view qayta paydo bo‘lganda keraksiz duplicate request nazorat qilinadi.

Animation

State o‘zgarishi animation bilan ko‘rsatilishi mumkin.

SwiftUI transition, implicit va explicit animation beradi.

Animation faqat visual qiymat, identity yoki hierarchy o‘zgarishiga bog‘liq.

Userning reduced-motion accessibility preference’i hisobga olinadi.

Preview

Xcode preview turli holatlarni tez ko‘rsatadi:

  • light va dark;
  • locale;
  • dynamic type;
  • device;
  • loading;
  • error;
  • sample data.

Preview production dependencyga bevosita ulanmasligi kerak.

Mock yoki in-memory data ishlatiladi.

UIKit bilan integratsiya

Mavjud UIKit componentini UIViewRepresentable yoki UIViewControllerRepresentable bilan SwiftUI ichiga joylashtirish mumkin.

SwiftUI view esa UIHostingController orqali UIKit hierarchy’ga qo‘shiladi.

Bu bosqichma-bosqich migration imkonini beradi.

Accessibility

SwiftUI ko‘p native control uchun semantic ma’lumotni avtomatik beradi.

Custom viewlarda:

  • label;
  • value;
  • hint;
  • trait;
  • focus order;
  • dynamic type

tekshiriladi.

Faqat rang yoki gesture bilan ma’no berilmaydi.

Performance

body tez va side-effectlarsiz bo‘lishi kerak.

Og‘ir hisoblash, image decoding va network ish boshqa qatlamda bajariladi.

Keraksiz katta observable object barcha viewlarni yangilashi mumkin.

Profiling Instruments bilan amalga oshiriladi.

Platform availability

SwiftUI APIlari OS versiyasiga qarab farq qiladi.

Deployment targetdan yangi API ishlatilsa availability check kerak.

Bir codebase bir nechta Apple platformasini qo‘llashi mumkin, ammo navigation va interaction har platformada bir xil emas.

Data flow

SwiftUI’da state imkon qadar bir yo‘nalishda oqadi: parent qiymat beradi, child event qaytaradi. Bir xil ma’lumotni bir nechta view ichida mustaqil nusxada saqlash sinxronizatsiya muammosi yaratadi. Source of truth aniq tanlanadi.

Equatable va update

Katta viewlarda input qiymatlari o‘zgarmaganini frameworkga ko‘rsatish ayrim optimizatsiyaga yordam berishi mumkin. Biroq qo‘lda equality qo‘shishdan oldin haqiqiy render bottleneck Instruments orqali topiladi.

Localization

Text, plural va o‘lcham turli tillarda tekshiriladi. Tarjima uzayganda layout siqilmasligi, o‘ngdan chapga yozuvda navigation va alignment moslashishi kerak.

Bog‘liq tushunchalar

SwiftUI, Swift, Declarative UI, View, State, Binding, Observable model, Environment, NavigationStack, UIKit, Xcode