Asosiy nuqtalar
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 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.
// @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)
}
}
}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 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.
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 |
|---|---|---|
| @State | Mahalliy holat (qiymat turi) | View egalik qiladi |
| @Binding | Ota-ona holatiga ulanish | Ota-ona egalik qiladi |
| @StateObject | ObservableObject yaratadi | View egalik qiladi |
| @ObservedObject | Tashqi obyektni kuzatadi | Tashqi egasi |
| @EnvironmentObject | Muhitdan obyekt | Ajdod egalik qiladi |
| @Environment | Tizim qiymati | Tizim |
| @AppStorage | UserDefaults | UserDefaults |
| @FocusState | Kiritish fokusi | View 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.
@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.
.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.
.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.
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.
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 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.
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))
}
}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.
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
View Protocol asosiy protokol. var body: some View talab qiladi. body GPU da render qilingan UI tavsifi.
@ViewBuilder bir nechta Views uchun Result Builder. Konteynerlarda if/else, switch, ForEach ga imkon beradi.
@StateObject obyekt yaratadi. @ObservedObject mavjudni kuzatadi. Iyerarxiyada birinchi yaratish uchun @StateObject.
NavigationStack — ma'lumotga asoslangan navigatsiya. path-based, deep linking. NavigationView o'rnini egallaydi.
@FocusState — kiritish fokusini boshqarish. .focused() modifikatori. Bir nechta maydonlar uchun enum qo'llab-quvvatlanadi.
Xulosa
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.