Azimjon Abdurasulov

SwiftUI

Interview Savollari

SwiftUI Interview Savollari va Javoblari (Junior - Senior)

Ushbu qo'llanmada SwiftUI framework'i bo'yicha eng ko'p so'raladigan 40 ta savol va javoblar daraja bo'yicha jamlangan. SwiftUI bugungi kunda iOS intervyularining eng muhim mavzularidan biriga aylangan.


1. SwiftUI Asoslari (Junior daraja)

1. SwiftUI nima va u UIKit'dan nimasi bilan farq qiladi?

Javob: SwiftUI — Apple tomonidan 2019 yilda taqdim etilgan deklarativ UI framework. UIKit'da "qanday qilish kerak" (imperativ) yozilsa, SwiftUI'da "nima ko'rinishi kerak" (deklarativ) yoziladi. SwiftUI kamroq kod, real-time preview va cross-platform (iOS, macOS, watchOS, tvOS) qulayligini beradi.

2. @State nima va u qanday ishlaydi?

Javob: @State — View'ga tegishli mahalliy (local) ma'lumotni saqlash uchun property wrapper. U o'zgarganda SwiftUI avtomatik ravishda faqat bog'langan View'larni qayta chizadi (re-render). @State faqat oddiy qiymatlar (String, Int, Bool) uchun ishlatiladi va doimo private bo'lishi tavsiya etiladi.

3. @Binding nima va qachon ishlatiladi?

Javob: @Binding — bola (child) View'ga ota (parent) View'dagi @State ma'lumotiga ikki tomonlama bog'lanish berish. Bola View'da qiymat o'zgarganda, ota View'da ham o'zgaradi. $ prefiksi bilan uzatiladi.

4. VStack, HStack, ZStack nima?

Javob:

  • VStack — Vertikal joylashuv (yuqoridan pastga).
  • HStack — Gorizontal joylashuv (chapdan o'ngga).
  • ZStack — Ustma-ust joylashuv (Z o'qi, masalan, rasm ustiga matn qo'yish).

5. SwiftUI'da List va ForEach farqi?

Javob:

  • List — scroll qilinadigan ro'yxat yaratadi (UITableView analogi). Avtomatik separatorlar va stillar bilan keladi.
  • ForEach — massiv elementlari bo'ylab iteratsiya qilib, har biri uchun View yaratadi. U mustaqil scroll bermaydi, konteyner ichida ishlatiladi.

6. .modifier nima va qanday ishlaydi?

Javob: View modifier — bu View'ga stil yoki xususiyat qo'shuvchi funksiya. Masalan: .font(), .foregroundColor(), .padding(), .background(). Har bir modifier yangi View qaytaradi (chaining imkoniyati).

7. NavigationStack va NavigationLink?

Javob:

  • NavigationStack (iOS 16+) — ekranlar orasida navigatsiya yaratish uchun konteyner. Eski NavigationView o'rniga ishlatiladi.
  • NavigationLink — bosilganda boshqa ekranga o'tkazadigan element.

8. .sheet va .fullScreenCover farqi?

Javob:

  • .sheet — ekranning bir qismini qoplaydi, pastga surish bilan yopiladi.
  • .fullScreenCover — butun ekranni to'liq qoplaydi, faqat dasturiy (programmatic) ravishda yopiladi.

9. @Environment property wrapper?

Javob: Tizim darajasidagi (system-level) ma'lumotlarni o'qish uchun: masalan, \.colorScheme (dark/light mode), \.dismiss (ekranni yopish), \.locale (til). Apple tomonidan taqdim etilgan global sozlamalar.

10. Image va AsyncImage farqi?

Javob:

  • Image — assetsdan yoki tizimdan (SF Symbols) rasm ko'rsatadi.
  • AsyncImage (iOS 15+) — URL orqali internetdan rasmni asinxron yuklaydi va ko'rsatadi. Placeholder va error holatlarini qo'llab-quvvatlaydi.

2. SwiftUI O'rta Daraja (Middle)

11. @StateObject va @ObservedObject farqi?

Javob:

  • @StateObject — View bu obyektning egasi (owner). View qayta render qilinsa ham obyekt saqlanib qoladi.
  • @ObservedObject — View bu obyektni tashqaridan oladi. View qayta render qilinsa, obyekt ham yangidan yaratilishi mumkin. Qoida: View o'zi yaratsa @StateObject, tashqaridan kelsa @ObservedObject.

12. @EnvironmentObject qanday ishlaydi?

Javob: Butun View daraxtida (hierarchy) ma'lumotni uzatish. Ota View'da .environmentObject(viewModel) deb inject qilinadi, istalgan ichki View'da @EnvironmentObject var vm: MyViewModel deb olinadi. Props drilling'dan qutqaradi.

13. @Published va ObservableObject tushunchasi?

Javob: ObservableObject — classni SwiftUI kuzatishi (observe) uchun belgilash. @Published — o'sha class ichidagi property o'zgarganda barcha subscriber'larga xabar berish. Bu MVVM arxitekturasining asosi.

14. @ViewBuilder nima?

Javob: Bir nechta View'ni bitta blok ichida qaytarish imkonini beruvchi result builder. Custom View yaratishda content parametrini qabul qilish uchun ishlatiladi. SwiftUI'ning body property'sining o'zi ham @ViewBuilder.

15. GeometryReader nima va qachon kerak?

Javob: Parent View'ning o'lchami va koordinatalarini bilish uchun konteyner. Foiz asosida layout (masalan, ekran kengligining 50%) yoki scroll offset'ni aniqlashda ishlatiladi. Lekin ortiqcha ishlatish performansga ta'sir qiladi.

16. PreferenceKey nima?

Javob: Bola View'dan ota View'ga ma'lumot yuborish mexanizmi (odatda ma'lumot yuqoridan pastga oqadi, bu esa teskarisini amalga oshiradi). Masalan, ichki View'ning balandligini ota View'ga xabar berish uchun ishlatiladi.

17. SwiftUI animatsiyalari: withAnimation vs .animation?

Javob:

  • withAnimation { ... } — aniq qaysi State o'zgarishi animatsiya bilan kuzatilishini nazorat qiladi (explicit).
  • .animation(.default, value:) — View'ga biriktirilib, value o'zgarganda avtomatik animatsiya qo'shadi (implicit).

18. @Namespace va matchedGeometryEffect nima?

Javob: Ikki View o'rtasida silliq (smooth) o'tish animatsiyasi yaratish uchun. Masalan, ro'yxatdagi element bosilganda uni batafsil ekranga "uchib o'tish" effekti berish. Hero animation deb ham ataladi.

19. task modifier nima?

Javob: View paydo bo'lganda asinxron ishni boshlash uchun SwiftUI modifier. onAppear + Task kombinatsiyasining toza ko'rinishi. View yo'qolganda task avtomatik bekor qilinadi (cancel).

20. SwiftUI Preview nima va u qanday ishlaydi?

Javob: Xcode'da kodni o'zgartirish bilan bir vaqtda UI natijasini real-time ko'rish. #Preview macro'si (Swift 5.9+) yoki eski PreviewProvider protokoli orqali sozlanadi. Har xil qurilma, dark/light mode va tillar uchun alohida preview qilish mumkin.


3. SwiftUI Ilg'or Daraja (Senior)

21. @Observable macro (iOS 17+) va ObservableObject farqi?

Javob: @Observable — yangi Observation framework'ining asosi. Farqlari:

  • @Published yozish shart emas, barcha property avtomatik kuzatiladi.
  • SwiftUI faqat o'zgangan property bilan bog'langan View'ni yangilaydi (surgical updates).
  • @StateObject o'rniga oddiy @State ishlatiladi.

22. SwiftUI Rendering mexanizmi (Body re-computation)?

Javob: SwiftUI bodyni qayta hisoblaydi, lekin butun View'ni emas, faqat o'zgargan qismini qayta chizadi (diffing algoritmi orqali). Lekin murakkab View hierarchy'da body qayta hisoblash sezilarli bo'lishi mumkin. Equatable conform qilish va kichik View'larga ajratish performance'ni yaxshilaydi.

23. SwiftUI Lifecycle: App, Scene, View?

Javob:

  • @main struct MyApp: App — ilovaning kirish nuqtasi.
  • Scene — oynaning kontenti (WindowGroup, DocumentGroup).
  • View — alohida interfeys bo'lagi. UIKit'dagi AppDelegate/SceneDelegate o'rnini egallaydi.

24. Custom Layout (iOS 16+)?

Javob: Layout protokoli orqali VStack, HStack dan tashqari o'z joylashuv qoidalaringizni yaratish. sizeThatFits va placeSubviews metodlarini implementatsiya qilish orqali elementlarni ixtiyoriy tartibda joylashtirish mumkin.

25. @MainActor va SwiftUI threading qoidasi?

Javob: SwiftUI'dagi barcha View property'lari va body Main Thread'da ishlaydi. ViewModel'ga @MainActor qo'yish orqali uning barcha ishlarini Main Thread'da bajarilishini kafolatlash mumkin. Background ishlar uchun Task.detached yoki alohida Actor ishlatiladi.

26. UIKit Interoperability: UIViewRepresentable?

Javob: SwiftUI ichida UIKit View'lardan foydalanish uchun. makeUIView, updateUIView va Coordinator metodlarini implementatsiya qilish bilan UIKit elementlarini (MKMapView, WKWebView) SwiftUI'ga o'rash mumkin.

27. SwiftUI Navigation — Programmatic Routing?

Javob: NavigationStack(path:) va navigationDestination(for:) orqali butun navigatsiya stack'ini programmatik boshqarish. Coordinator pattern'ni SwiftUI'da qo'llash uchun enum-based routing ishlatiladi.

28. ScrollViewReader va LazyVGrid?

Javob:

  • ScrollViewReader — scroll pozitsiyasini programmatik boshqarish (masalan, chat'da eng pastga otish).
  • LazyVGrid/LazyHGrid — elementlarni griddagidek joylashtirib, faqat ekranda ko'ringanlarini render qiladi (UICollectionView analogi).

29. SwiftUI Performance Optimization?

Javob:

  • Kichik, mustaqil View'larga ajratish (body re-computation'ni kamaytirish).
  • @State va @StateObject ni to'g'ri joyda e'lon qilish.
  • LazyVStack/LazyHStack ishlatish (katta ro'yxatlar uchun).
  • Equatable conformance qo'shish.
  • Image'lar uchun .resizable() va .scaledToFit() ishlatish.

30. TipKit (iOS 17+) nima?

Javob: Apple'ning yangi framework'i bo'lib, foydalanuvchilarga ilova ichidagi funksiyalar haqida "tip" (maslahat) ko'rsatish uchun ishlatiladi. Foydalanuvchi harakatlariga (event'lar va qoidalarga) asoslanib, to'g'ri paytda maslahatni ko'rsatadi.


4. Real-World SwiftUI Savollari

31. MVVM patternini SwiftUI'da qanday qo'llaysiz?

Javob:

  • Model: Ma'lumot strukturasi (Struct).
  • ViewModel: @Observable (yoki ObservableObject) class, biznes logika va API chaqiruvlari.
  • View: SwiftUI View, faqat ko'rsatish.

32. SwiftUI'da xatoliklarni (error) qanday ko'rsatasiz?

Javob: .alert(isPresented:) yoki .alert(item:) modifier'lari orqali. ViewModel'da @Published var errorMessage: String? saqlash va View'da uni .alert ga bog'lash — keng tarqalgan yondashuv.

33. Dark Mode qo'llab-quvvatlashning to'g'ri usuli?

Javob: Color asset catalog'da "Any Appearance" va "Dark" variantlarini qo'shish. Kod ichida @Environment(\.colorScheme) orqali aniqlash. Qattiq rang kodlaridan qochish va .primary, .secondary kabi semantik ranglar ishlatish.

34. SwiftUI'da Pagination (Sahifaviy yuklash)?

Javob: List yoki LazyVStack ichida oxirgi element paydo bo'lganda (onAppear) keyingi sahifani yuklash. ViewModel'da currentPage va isLoading holatlari saqlanadi.

35. SwiftUI'da Custom Transitions?

Javob: .transition() modifier orqali elementlarning paydo bo'lish va yo'qolish animatsiyalarini boshqarish (.opacity, .slide, .scale). AnyTransition.asymmetric orqali kirish va chiqish uchun har xil animatsiya berish.

36. @FocusState nima?

Javob: TextField'lar orasida fokusni (cursor) boshqarish uchun property wrapper. Masalan, login formida "Email" maydonidan "Parol" maydoniga avtomatik o'tish yoki tugma bosilganda klaviaturani yashirish.

37. confirmationDialog va alert farqi?

Javob:

  • alert — oddiy xabar va 1-2 tugma (OK/Cancel).
  • confirmationDialog — action sheet ko'rinishida bir nechta variant taqdim etadi (masalan, "O'chirish", "Tahrirlash", "Bekor qilish").

38. SwiftUI va Core Data integratsiyasi?

Javob: @FetchRequest property wrapper orqali Core Data'dan ma'lumotlarni avtomatik olish va UI'da ko'rsatish. Ma'lumot o'zgarganda View avtomatik yangilanadi. @Environment(\.managedObjectContext) orqali context'ga kirish.

39. searchable modifier?

Javob: iOS 15+ da List yoki NavigationStack ichida qidiruv maydoni qo'shish. .searchable(text:) orqali foydalanuvchi kiritgan matnni ViewModel'ga bog'lash va natijalarni filterlab ko'rsatish.

40. SwiftUI va Combine integratsiyasi?

Javob: Combine publisher'larini .onReceive() modifier orqali View'da kuzatish. Timer, NotificationCenter yoki custom publisher'lardan kelgan eventlarga SwiftUI'da reactiv javob berish uchun ishlatiladi.


Yakuniy Maslahat:

SwiftUI haqida savollar tushsa, amaliy misol bilan javob bering. Masalan, @State haqida so'ralganda oddiy counter ilovasini tushuntiring. Real loyihadagi tajribangizni (MVVM, API integration, Navigation) albatta qayd eting. Muvaffaqiyat tilaymiz! 🍎

Markdown manba

iOS Lessons