Mobil inkişafda SwiftUI: bu nədir, əsas anlayışlar və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-07-02 Oxuma vaxtı: 10 dəq
SwiftUI bütün platformalarda interfeyslər qurmaq üçün Apple-ın deklarativ freymvorkudur. Apple SwiftUI Docs (2025)-ə görə, App Store-da yeni tətbiqlərin 70%-i SwiftUI-dən istifadə edir. SwiftUI-nin əsas anlayışlarını başa düşmək — View Protocol, @ViewBuilder, NavigationStack — müasir iOS inkişafının təməlidir.

Əsas məqamlar

  • View Protocol — var body: some View. Hər View View protokoluna uyğun bir struktur. body UI təsviridir.
  • @ViewBuilder — Konteynerlərdə çoxsaylı Views üçün Result Builder. body daxilində if/else, switch, ForEach.
  • NavigationStack (iOS 16+) — məlumat əsaslı naviqasiya. path-based, deep linking. NavigationView-i əvəz edir.
  • @StateObject — obyekt sahibliyi. @ObservedObject — müşahidə. @EnvironmentObject — mühit.
  • @FocusState — fokus idarəetməsi. .task{}, .onAppear{} — həyat dövrü. PreviewProvider — ön baxış.

Əsaslar (View Protocol, body, some View, @ViewBuilder)

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

@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.

swift
// @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)
            }
    }
}

Modifikatorlar və konteynerlər (ViewModifier, NavigationStack, List, Form)

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 və Form ətraflı

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çü.

Vəziyyət idarəetməsi (@StateObject, @ObservedObject, @EnvironmentObject, @FocusState)

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
@StateYerli vəziyyət (dəyər tipi)View sahibdir
@BindingValideyn vəziyyətinə qoşulmaValideyn sahibdir
@StateObjectObservableObject yaradırView sahibdir
@ObservedObjectXarici obyekti müşahidə edirXarici sahib
@EnvironmentObjectMühitdən obyektƏcdad sahibdir
@EnvironmentSistem dəyəriSistem
@AppStorageUserDefaultsUserDefaults
@FocusStateGiriş fokusuView 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.

Mühit dəyərləri və DI

@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.

Həyat dövrü (.task, .onAppear, .onDisappear)

.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.

SwiftUI-də animasiya

.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.

Məlumat axını (Bindings, @Published, ObservableObject)

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.

swift
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 və lokallaşdırma

Ə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.

swift
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))
    }
}

Diaqramlar və vizuallaşdırma (Swift Charts)

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.

swift
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

SwiftUI-də View Protocol nədir?

View Protocol əsas protokoldur. var body: some View tələb edir. body GPU-da render edilən UI təsviridir.

@ViewBuilder nədir və nə üçün lazımdır?

@ViewBuilder çoxsaylı Views üçün Result Builder-dir. Konteynerlərdə if/else, switch, ForEach-ə imkan verir.

@StateObject və @ObservedObject arasında fərq nədir?

@StateObject obyekt yaradır. @ObservedObject mövcud olanı müşahidə edir. İyerarxiyada ilk yaratma üçün @StateObject.

iOS 16+-da NavigationStack nədir?

NavigationStack — məlumat əsaslı naviqasiya. path-based, deep linking. NavigationView-i əvəz edir.

SwiftUI-də @FocusState necə işləyir?

@FocusState — giriş fokus idarəetməsi. .focused() modifikatoru. Çoxsaylı sahələr üçün enum dəstəyi.

Xülasə

  • View Protocol — var body: some View. SwiftUI-nin təməli. Hər View bir struct.
  • @ViewBuilder — çoxsaylı Views üçün deklarativ sintaksis. body-də if/else, ForEach.
  • NavigationStack (iOS 16+) — müasir naviqasiya. data-driven, path-based.
  • @StateObject — model sahibliyi. @ObservedObject — müşahidə. @EnvironmentObject — DI.
  • @FocusState — fokus idarəetməsi. Formalar və çoxsaylı giriş sahələri üçün faydalıdır.
  • .task{} — avtomatik ləğv ilə asinxron əməliyyat. .onAppear{} — sinxron.
  • PreviewProvider və Canvas — Xcode-da ön baxışlar. @ScaledMetric — uyğunlaşan ölçülər.

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.

Layihəni müzakirə et