Əsas məqamlar
View Protocol SwiftUI-nin mərkəzi protokoludur. Tək bir xüsusiyyət tələb edir: var body: some View. body UI təsvirini qaytaran hesablanmış xüsusiyyətdir. SwiftUI hər vəziyyət dəyişikliyində body-ni çağırır və nəticəni GPU-da render edir.
@ViewBuilder Views üçün Result Builder-dir. return və TupleView olmadan closure daxilində çoxsaylı Views yazmağa imkan verir. if/else, switch, ForEach-i dəstəkləyir. Bütün konteynerlər (VStack, HStack, ZStack, Group) @ViewBuilder istifadə edir. Alternativ olaraq layout olmadan qruplaşma üçün Group { … } istifadə edilə bilər. some View Opaque Type-dır. Kompilyator konkret View tipini (Text, Button, VStack və s.) bilir, lakin xarici olaraq some View kimi qaytarır. Bu, imzanı dəyişmədən body tipini dəyişməyə imkan verir. ViewModifier — View modifikatoru: .font(), .padding(), .background(). ViewModifier protokolu və .modifier() vasitəsilə xüsusi modifikator.
// @ViewBuilder və NavigationStack ilə View Nümunəsi
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 ilə 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+) — məlumat əsaslı naviqasiya. Bir yol (hashable dəyərlər massivi) götürür və navigationDestination vasitəsilə hədəfi göstərir. Hədəf görünüşlərlə NavigationLink-i əvəz edir. NavigationLink — yığında naviqasiya üçün düymə. List — bölmələr, sürüşdürmələr, silmə və sürüklə buraxma ilə şaquli siyahı. Form — parametrlər üçün ixtisaslaşmış List: bölmələr, seçicilər, keçidlər, mətn sahələri. Section — başlıq və altbilgi ilə List/Form-da qruplaşma. ViewModifier — stilləri təkrar istifadə etmək üçün xüsusi modifikatorlar. .modifier(CustomModifier()) — tətbiq.
List SwiftUI-də UITableView-in ekvivalentidir. .onDelete, .onMove, .refreshable dəstəkləyir. SwipeActions — .swipeActions { Button("Sil", role: .destructive) { } }. Form — parametrlər üçün optimallaşdırılıb: DatePicker, Toggle, Stepper, Picker. Başlıq/altbilgi ilə Section — qruplaşma üçün. OutlineGroup — iyerarxik siyahılar (bölmələrlə UITableView ekvivalenti). DisclosureGroup — məzmunla qatlanan bölmə. IT Sectr məlumatlar üçün List və parametrlər üçün Form tövsiyə edir.
PreviewProvider — Xcode Canvas-da ön baxışlar üçün protokol. Canvas — interaktiv SwiftUI ön baxışı (@main və Swift 5.9+ tələb edir). @ScaledMetric — Dynamic Type ilə miqyaslanan uyğunlaşan ölçü.
Property Wrappers SwiftUI-də vəziyyət idarəetməsinin təməlidir. @State — yerli vəziyyət (dəyər tipi). @Binding — valideyn vəziyyətinə qoşulma. @StateObject — ObservableObject yaradır. SwiftUI obyektin həyat dövrünü idarə edir. @ObservedObject — xarici ObservableObject-i müşahidə edir. @EnvironmentObject — mühitdən obyekt (.environmentObject() vasitəsilə asılılıq inyeksiyası). @Environment — sistem dəyərləri (.colorScheme, .locale). @AppStorage — UserDefaults. @FetchRequest — Core Data sorğusu. @FocusState — giriş fokusu.
| Sarıcı | Məqsəd | Sahiblik |
|---|---|---|
| @State | Yerli vəziyyət (dəyər tipi) | View sahibdir |
| @Binding | Valideyn vəziyyətinə qoşulma | Valideyn sahibdir |
| @StateObject | ObservableObject yaradır | View sahibdir |
| @ObservedObject | Xarici obyekti müşahidə edir | Xarici sahib |
| @EnvironmentObject | Mühitdən obyekt | Əcdad sahibdir |
| @Environment | Sistem dəyəri | Sistem |
| @AppStorage | UserDefaults | UserDefaults |
| @FocusState | Giriş fokusu | View sahibdir |
@StateObject vs @ObservedObject: @StateObject obyekt yaradır, @ObservedObject onu müşahidə edir. İyerarxiyada ilk model yaratma üçün @StateObject, uşaq görünüşlərə ötürmək üçün @ObservedObject istifadə edin. @FocusState — fokus idarəetməsi: .focused($field, equals: .email). Çoxsaylı sahələr üçün enum dəstəkləyir.
@Environment — sistem dəyərləri: colorScheme, locale, sizeCategory, layoutDirection, managedObjectContext. Xüsusi Mühit Dəyərləri — EnvironmentKey vasitəsilə xüsusi dəyər. Asılılıq inyeksiyası üçün istifadə olunur: açıq parametrlər olmadan xidmətləri ötürmək. .environment() modifikatoru — iyerarxiyada dəyər təyin edir. @EnvironmentObject — .environmentObject()-dən ObservableObject. İstinad tipini ötürməsi ilə @Environment-dən fərqlənir. IT Sectr sistem dəyərləri üçün @Environment və xidmətlər üçün @EnvironmentObject tövsiyə edir.
.task{} — görünüş görünəndə asinxron əməliyyat. Yox olanda avtomatik ləğv. async/await üçün .onAppear-ı əvəz edir. .onAppear{} — görünəndə sinxron əməliyyat. .onDisappear{} — yox olanda əməliyyat. .onChange(of:) — dəyər dəyişikliklərinə reaksiya. .onReceive(Publisher) — Combine naşirinə reaksiya. SwiftUI-də View həyat dövrü: init → onAppear → body (render) → onDisappear. Vəziyyət dəyişikliyində: body → diff → yenidən render. IT Sectr asinxron yükləmə üçün .task və analitika üçün .onAppear tövsiyə edir.
.animation() — animasiya modifikatoru. .transition() — görünmə/yox olma animasiyası. withAnimation — açıq vəziyyət dəyişikliyi animasiyası. matchedGeometryEffect — müxtəlif görünüşlər arasında animasiya (hero animasiyası). PhaseAnimator (iOS 17+) — enum əsaslı çoxfazalı animasiya. KeyframeAnimator (iOS 17+) — açar kadrlarla kadr-kadr animasiya. SwiftUI animasiyaları Core Animation vasitəsilə GPU-da işləyir. IT Sectr təbii animasiyalar üçün .spring() və fiziki effektlər üçün .interpolatingSpring tövsiyə edir.
ObservableObject — @Published xüsusiyyətləri olan obyektlər üçün protokol. SwiftUI objectWillChange naşirinə abunə olur. @Published — xüsusiyyət dəyişikliklərini nəşr edir. @StateObject — ObservableObject yaradır, həyat dövrünü idarə edir. @ObservedObject — xarici müşahidə edir. Combine — reaktiv proqramlaşdırma üçün freymvork. @EnvironmentObject — mühit vasitəsilə DI. .environmentObject() təyin edir, @EnvironmentObject oxuyur. MVVM — standart arxitektura: View (SwiftUI) — ViewModel (ObservableObject) — Model. IT Sectr əsas ViewModels üçün MVVM + @StateObject tövsiyə edir.
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("Xəta: \(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() }
}
}
}Əlçatanlıq SwiftUI-də: .accessibilityLabel(), .accessibilityHint(), .accessibilityValue(), .accessibilityAddTraits(). VoiceOver əlçatanlıq etiketlərini oxuyur. Dynamic Type — @ScaledMetric, @DynamicProperty. Lokallaşdırma: String(localized:) (SwiftUI + String Catalog). LocalizedStringKey — avtomatik tərcümə. Cəm qaydaları — String Catalog vasitəsilə (one, few, many, other). Sağdan sola (Ərəbcə, İvritcə) — avtomatik dəstəklənir. .environment(.layoutDirection, .rightToLeft). IT Sectr bütün interaktiv elementlər üçün əlçatanlıq etiketləri tövsiyə edir.
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 Dəstəyi
struct ScalableText: View {
@ScaledMetric private var fontSize: CGFloat = 17
var body: some View {
Text("Hello, World!")
.font(.system(size: fontSize))
}
}Swift Charts (iOS 16+) — diaqramlar qurmaq üçün freymvork. Chart { } — əsas konteyner. BarMark, LineMark, PointMark, AreaMark, RuleMark — işarələr. Məlumatlar üçün ForEach. ChartAxis — oxların fərdiləşdirilməsi. .chartXAxis, .chartYAxis. ChartLegend — izahat. İnterpolyasiya — catmullRom, linear, step. Animasiya — Chart üçün .animation(). IT Sectr daxili diaqramlar üçün Swift Charts və mürəkkəb diaqramlar üçün Charts (DGCharts) tövsiyə edir.
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-ın asılılıq meneceri. Xcode ilə inteqrasiya olunub. Dəstəkləyir: ikili paketlər, resurslar, testlər, swift-6 ciddi konkurrentlik. semver teqi ilə GitHub vasitəsilə paket nəşri. SPM CocoaPods və Carthage-ı əvəz edən Swift asılılıqları üçün de-fakto standartdır. IT Sectr bütün yeni layihələr üçün SPM tövsiyə edir.
Swift Concurrency (async/await, TaskGroup, AsyncSequence) — async/await Swift 5.5+-də qurulub. Task — asinxronluq vahidi. TaskGroup — paralel tapşırıqlar. AsyncSequence — asinxron ardıcıllıq (AsyncStream, AsyncAlgorithms). Task Local Values — Task üçün kontekst məlumatları. Swift Concurrency asinxron əməliyyatlar üçün Combine-ı tamamilə əvəz edir.
Tez-tez verilən suallar
View Protocol əsas protokoldur. var body: some View tələb edir. body GPU-da render edilən UI təsviridir.
@ViewBuilder çoxsaylı Views üçün Result Builder-dir. Konteynerlərdə if/else, switch, ForEach-ə imkan verir.
@StateObject obyekt yaradır. @ObservedObject mövcud olanı müşahidə edir. İyerarxiyada ilk yaratma üçün @StateObject.
NavigationStack — məlumat əsaslı naviqasiya. path-based, deep linking. NavigationView-i əvəz edir.
@FocusState — giriş fokus idarəetməsi. .focused() modifikatoru. Çoxsaylı sahələr üçün enum dəstəyi.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.