موبائل ڈیولپمنٹ میں SwiftUI: یہ کیا ہے، کلیدی تصورات اور یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-07-02 مطالعے کا وقت: 10 منٹ
SwiftUI تمام پلیٹ فارمز پر انٹرفیس بنانے کے لیے Apple کا اعلانیہ فریم ورک ہے۔ Apple SwiftUI Docs (2025) کے مطابق، App Store پر 70% نئی ایپس SwiftUI استعمال کرتی ہیں۔ SwiftUI کے کلیدی تصورات کو سمجھنا — View Protocol، @ViewBuilder، NavigationStack — جدید iOS ڈیولپمنٹ کی بنیاد ہے۔

اہم نکات

  • View Protocol — var body: some View۔ ہر View ایک ساخت ہے جو View پروٹوکول کی پیروی کرتی ہے۔ body UI کی تفصیل ہے۔
  • @ViewBuilder — کنٹینرز میں متعدد Views کے لیے Result Builder۔ body کے اندر if/else، switch، ForEach۔
  • NavigationStack (iOS 16+) — ڈیٹا سے چلنے والی نیویگیشن۔ پاتھ پر مبنی، ڈیپ لنکنگ۔ NavigationView کی جگہ لیتا ہے۔
  • @StateObject — آبجیکٹ کی ملکیت۔ @ObservedObject — مشاہدہ۔ @EnvironmentObject — ماحول۔
  • @FocusState — فوکس مینجمنٹ۔ .task{}، .onAppear{} — لائف سائیکل۔ PreviewProvider — پیش نظارہ۔

بنیادی باتیں (View Protocol، body، some View، @ViewBuilder)

View Protocol SwiftUI کا مرکزی پروٹوکول ہے۔ اسے صرف ایک پراپرٹی درکار ہے: var body: some View۔ body ایک computed property ہے جو UI کی تفصیل لوٹاتا ہے۔ SwiftUI ہر اسٹیٹ تبدیلی پر body کو کال کرتا ہے اور GPU پر نتیجہ رینڈر کرتا ہے۔

@ViewBuilder

@ViewBuilder Views کے لیے Result Builder ہے۔ یہ return اور TupleView کے بغیر closure کے اندر متعدد Views لکھنے کی اجازت دیتا ہے۔ یہ if/else، switch، ForEach کو سپورٹ کرتا ہے۔ تمام کنٹینر (VStack، HStack، ZStack، Group) @ViewBuilder استعمال کرتے ہیں۔ ایک متبادل Group { … } ہے بغیر لے آؤٹ کے گروپ کرنے کے لیے۔ some View ایک Opaque Type ہے۔ کمپائلر مخصوص View کی قسم (Text، Button، VStack وغیرہ) جانتا ہے، لیکن اسے بیرونی طور پر some View کے طور پر لوٹاتا ہے۔ یہ دستخط تبدیل کیے بغیر body کی قسم تبدیل کرنے کی اجازت دیتا ہے۔ ViewModifier — View موڈیفائر: .font()، .padding()، .background()۔ ViewModifier پروٹوکول اور .modifier() کے ذریعے کسٹم موڈیفائر۔

swift
// @ViewBuilder اور NavigationStack کے ساتھ View کی مثال
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 کے ساتھ DetailView
struct DetailView: View {
    let item: String
    @StateObject private var viewModel = DetailViewModel()

    var body: some View {
        Text(item)
            .task {
                await viewModel.loadDetails(for: item)
            }
    }
}

موڈیفائر اور کنٹینر (ViewModifier، NavigationStack، List، Form)

NavigationStack (iOS 16+) — ڈیٹا سے چلنے والی نیویگیشن۔ ایک پاتھ (ہیش ایبل اقدار کی صف) لیتا ہے اور navigationDestination کے ذریعے منزل دکھاتا ہے۔ منزل کے نظاروں کے ساتھ NavigationLink کی جگہ لیتا ہے۔ NavigationLink — اسٹیک میں نیویگیٹ کرنے کا بٹن۔ List — سیکشنز، سوائپ، ڈیلیٹ اور ڈریگ اینڈ ڈراپ کے ساتھ عمودی فہرست۔ Form — سیٹنگز کے لیے مخصوص List: سیکشنز، چنندہ، ٹوگلز، ٹیکسٹ فیلڈز۔ Section — ہیڈر اور فوٹر کے ساتھ List/Form میں گروپنگ۔ ViewModifier — اسٹائل کو دوبارہ استعمال کرنے کے لیے کسٹم موڈیفائر۔ .modifier(CustomModifier()) — اطلاق۔

List اور Form تفصیل سے

List SwiftUI میں UITableView کے برابر ہے۔ .onDelete، .onMove، .refreshable کو سپورٹ کرتا ہے۔ SwipeActions — .swipeActions { Button("حذف کریں", role: .destructive) { } }۔ Form — سیٹنگز کے لیے بہتر بنایا گیا: DatePicker، Toggle، Stepper، Picker۔ ہیڈر/فوٹر کے ساتھ Section — گروپنگ کے لیے۔ OutlineGroup — درجہ بندی کی فہرستیں (سیکشنز کے ساتھ UITableView کے برابر)۔ DisclosureGroup — مواد کے ساتھ بند ہونے والا سیکشن۔ IT Sectr ڈیٹا کے لیے List اور سیٹنگز کے لیے Form تجویز کرتا ہے۔

PreviewProvider — Xcode Canvas میں پیش نظارہ کے لیے پروٹوکول۔ Canvas — انٹرایکٹو SwiftUI پیش نظارہ (@main اور Swift 5.9+ درکار)۔ @ScaledMetric — انکولی سائز جو Dynamic Type کے ساتھ پیمانہ کرتا ہے۔

اسٹیٹ مینجمنٹ (@StateObject، @ObservedObject، @EnvironmentObject، @FocusState)

Property Wrappers SwiftUI میں اسٹیٹ مینجمنٹ کی بنیاد ہیں۔ @State — مقامی اسٹیٹ (ویلیو ٹائپ)۔ @Binding — والدین کی اسٹیٹ سے کنکشن۔ @StateObject — ObservableObject بناتا ہے۔ SwiftUI آبجیکٹ کے لائف سائیکل کا انتظام کرتا ہے۔ @ObservedObject — بیرونی ObservableObject کا مشاہدہ کرتا ہے۔ @EnvironmentObject — ماحول سے آبجیکٹ (.environmentObject() کے ذریعے ڈیپنڈنسی انجیکشن)۔ @Environment — سسٹم ویلیوز (.colorScheme، .locale)۔ @AppStorage — UserDefaults۔ @FetchRequest — Core Data کوئری۔ @FocusState — ان پٹ فوکس۔

ریپر مقصد ملکیت
@Stateمقامی اسٹیٹ (ویلیو ٹائپ)View کی ملکیت
@Bindingوالدین کی اسٹیٹ سے کنکشنوالدین کی ملکیت
@StateObjectObservableObject بناتا ہےView کی ملکیت
@ObservedObjectبیرونی آبجیکٹ کا مشاہدہبیرونی مالک
@EnvironmentObjectماحول سے آبجیکٹآباؤ اجداد کی ملکیت
@Environmentسسٹم ویلیوسسٹم
@AppStorageUserDefaultsUserDefaults
@FocusStateان پٹ فوکسView کی ملکیت

@StateObject بمقابلہ @ObservedObject: @StateObject ایک آبجیکٹ بناتا ہے، @ObservedObject اس کا مشاہدہ کرتا ہے۔ درجہ بندی میں پہلا ماڈل بنانے کے لیے @StateObject استعمال کریں، چائلڈ ویوز میں بھیجنے کے لیے @ObservedObject۔ @FocusState — فوکس مینجمنٹ: .focused($field, equals: .email)۔ متعدد فیلڈز کے لیے enum کو سپورٹ کرتا ہے۔

ماحولی اقدار اور DI

@Environment — سسٹم ویلیوز: colorScheme، locale، sizeCategory، layoutDirection، managedObjectContext۔ کسٹم ماحولی اقدار — EnvironmentKey کے ذریعے کسٹم ویلیو۔ ڈیپنڈنسی انجیکشن کے لیے استعمال کیا جاتا ہے: واضح پیرامیٹرز کے بغیر سروسز بھیجنا۔ .environment() موڈیفائر — درجہ بندی میں ویلیو سیٹ کرتا ہے۔ @EnvironmentObject — .environmentObject() سے ObservableObject۔ @Environment سے مختلف ہے کیونکہ یہ ریفرنس ٹائپ بھیجتا ہے۔ IT Sectr سسٹم ویلیوز کے لیے @Environment اور سروسز کے لیے @EnvironmentObject تجویز کرتا ہے۔

لائف سائیکل (.task، .onAppear، .onDisappear)

.task{} — ویو ظاہر ہونے پر غیر متزامن آپریشن۔ غائب ہونے پر خودکار منسوخی۔ async/await کے لیے .onAppear کی جگہ لیتا ہے۔ .onAppear{} — ظاہر ہونے پر متزامن آپریشن۔ .onDisappear{} — غائب ہونے پر آپریشن۔ .onChange(of:) — ویلیو تبدیلیوں پر ردعمل۔ .onReceive(Publisher) — Combine پبلشر پر ردعمل۔ SwiftUI میں View کا لائف سائیکل: init → onAppear → body (رینڈرنگ) → onDisappear۔ اسٹیٹ تبدیلی پر: body → diff → دوبارہ رینڈر۔ IT Sectr غیر متزامن لوڈنگ کے لیے .task اور تجزیات کے لیے .onAppear تجویز کرتا ہے۔

SwiftUI میں اینیمیشن

.animation() — اینیمیشن موڈیفائر۔ .transition() — ظاہر/غائب اینیمیشن۔ withAnimation — واضح اسٹیٹ تبدیلی اینیمیشن۔ matchedGeometryEffect — مختلف ویوز کے درمیان اینیمیشن (ہیرو اینیمیشن)۔ PhaseAnimator (iOS 17+) — enum پر مبنی کثیر مرحلہ اینیمیشن۔ KeyframeAnimator (iOS 17+) — کی فریموں کے ساتھ فریم بہ فریم اینیمیشن۔ SwiftUI اینیمیشنز Core Animation کے ذریعے GPU پر چلتی ہیں۔ IT Sectr قدرتی اینیمیشنز کے لیے .spring() اور طبعی اثرات کے لیے .interpolatingSpring تجویز کرتا ہے۔

ڈیٹا فلو (Bindings، @Published، ObservableObject)

ObservableObject — @Published پراپرٹیز والے آبجیکٹ کے لیے پروٹوکول۔ SwiftUI objectWillChange پبلشر کو سبسکرائب کرتا ہے۔ @Published — پراپرٹی تبدیلیاں شائع کرتا ہے۔ @StateObject — ObservableObject بناتا ہے، لائف سائیکل کا انتظام کرتا ہے۔ @ObservedObject — بیرونی مشاہدہ کرتا ہے۔ Combine — ری ایکٹیو پروگرامنگ کے لیے فریم ورک۔ @EnvironmentObject — ماحول کے ذریعے DI۔ .environmentObject() سیٹ کرتا ہے، @EnvironmentObject پڑھتا ہے۔ MVVM — معیاری فن تعمیر: View (SwiftUI) — ViewModel (ObservableObject) — Model۔ IT Sectr اہم ViewModels کے لیے MVVM + @StateObject تجویز کرتا ہے۔

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("غلطی: \(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() }
        }
    }
}

رسائی اور مقامی کاری

رسائی SwiftUI میں: .accessibilityLabel()، .accessibilityHint()، .accessibilityValue()، .accessibilityAddTraits()۔ VoiceOver رسائی کے لیبل پڑھتا ہے۔ Dynamic Type — @ScaledMetric، @DynamicProperty۔ مقامی کاری: String(localized:) (SwiftUI + String Catalog)۔ LocalizedStringKey — خودکار ترجمہ۔ جمع کے قواعد — String Catalog کے ذریعے (one، few، many، other)۔ دائیں سے بائیں (عربی، عبرانی) — خودکار طور پر معاون۔ .environment(.layoutDirection, .rightToLeft)۔ IT Sectr تمام انٹرایکٹو عناصر کے لیے رسائی کے لیبل تجویز کرتا ہے۔

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 سپورٹ
struct ScalableText: View {
    @ScaledMetric private var fontSize: CGFloat = 17

    var body: some View {
        Text("Hello, World!")
            .font(.system(size: fontSize))
    }
}

چارٹ اور تصور (Swift Charts)

Swift Charts (iOS 16+) — چارٹ بنانے کا فریم ورک۔ Chart { } — بنیادی کنٹینر۔ BarMark، LineMark، PointMark، AreaMark، RuleMark — نشانات۔ ڈیٹا کے لیے ForEach۔ ChartAxis — محور کی تخصیص۔ .chartXAxis، .chartYAxis۔ ChartLegend — علامات۔ انٹرپولیشن — catmullRom، linear، step۔ اینیمیشن — Chart کے لیے .animation()۔ IT Sectr بلٹ ان چارٹ کے لیے Swift Charts اور پیچیدہ چارٹ کے لیے Charts (DGCharts) تجویز کرتا ہے۔

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 کا ڈیپنڈنسی مینیجر۔ Xcode میں ضم۔ معاون: بائنری پیکجز، وسائل، ٹیسٹ، swift-6 سخت کنکرنسی۔ semver ٹیگ کے ساتھ GitHub کے ذریعے پیکج کی اشاعت۔ SPM CocoaPods اور Carthage کی جگہ Swift ڈیپنڈنسیز کا ڈی فیکٹو معیار ہے۔ IT Sectr تمام نئے پروجیکٹس کے لیے SPM تجویز کرتا ہے۔

Swift Concurrency (async/await، TaskGroup، AsyncSequence) — async/await Swift 5.5+ میں بنایا گیا ہے۔ Task — غیر متزامنیت کی اکائی۔ TaskGroup — متوازی کام۔ AsyncSequence — غیر متزامن ترتیب (AsyncStream، AsyncAlgorithms)۔ Task Local Values — Task کے لیے سیاق و سباق کا ڈیٹا۔ Swift Concurrency غیر متزامن کارروائیوں کے لیے Combine کو مکمل طور پر بدل دیتا ہے۔

اکثر پوچھے گئے سوالات

SwiftUI میں View Protocol کیا ہے؟

View Protocol بنیادی پروٹوکول ہے۔ اسے var body: some View درکار ہے۔ body GPU پر رینڈر کردہ UI کی تفصیل ہے۔

@ViewBuilder کیا ہے اور اس کی ضرورت کیوں ہے؟

@ViewBuilder متعدد Views کے لیے Result Builder ہے۔ کنٹینرز میں if/else، switch، ForEach کی اجازت دیتا ہے۔

@StateObject اور @ObservedObject میں کیا فرق ہے؟

@StateObject ایک آبجیکٹ بناتا ہے۔ @ObservedObject موجودہ کا مشاہدہ کرتا ہے۔ درجہ بندی میں پہلی تخلیق کے لیے @StateObject۔

iOS 16+ میں NavigationStack کیا ہے؟

NavigationStack — ڈیٹا سے چلنے والی نیویگیشن۔ پاتھ پر مبنی، ڈیپ لنکنگ۔ NavigationView کی جگہ لیتا ہے۔

SwiftUI میں @FocusState کیسے کام کرتا ہے؟

@FocusState — ان پٹ فوکس مینجمنٹ۔ .focused() موڈیفائر۔ متعدد فیلڈز کے لیے enum کو سپورٹ کرتا ہے۔

خلاصہ

  • View Protocol — var body: some View۔ SwiftUI کی بنیاد۔ ہر View ایک struct ہے۔
  • @ViewBuilder — متعدد Views کے لیے اعلانیہ نحو۔ body میں if/else، ForEach۔
  • NavigationStack (iOS 16+) — جدید نیویگیشن۔ data-driven، path-based۔
  • @StateObject — ماڈل کی ملکیت۔ @ObservedObject — مشاہدہ۔ @EnvironmentObject — DI۔
  • @FocusState — فوکس مینجمنٹ۔ فارمز اور متعدد ان پٹ فیلڈز کے لیے مفید۔
  • .task{} — خودکار منسوخی کے ساتھ غیر متزامن آپریشن۔ .onAppear{} — متزامن۔
  • PreviewProvider اور Canvas — Xcode میں پیش نظارہ۔ @ScaledMetric — انکولی سائز۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں