SwiftUI: یہ کیا ہے، اہم تصورات اور View Protocol

مصنف: IT Sectr اشاعت: 2026-04-30 مطالعے کا وقت: 8 منٹ

SwiftUI ایک اعلانیہ فریم ورک ہے جو Apple کے ماحولیاتی نظام کے تمام پلیٹ فارمز پر یوزر انٹرفیس بنانے کے لیے ہے۔ اقدامات کو لازمی طور پر بیان کرنے کے بجائے، ڈیولپر اعلان کرتا ہے کہ انٹرفیس کیسا نظر آنا چاہیے، اور SwiftUI اس کے رینڈرنگ اور اپ ڈیٹ کا انتظام کرتا ہے۔ Apple Developer Documentation (2025) کے مطابق، SwiftUI iOS 15+، iPadOS 15+، macOS 12+، watchOS 8+ اور tvOS 15+ کو سپورٹ کرتا ہے اور تمام انٹرفیس اجزاء کے لیے بنیادی بلڈنگ بلاک کے طور پر View Protocol استعمال کرتا ہے۔

اہم نکات

  • SwiftUI Apple کا ایک اعلانیہ فریم ورک ہے جس میں ڈیولپر انٹرفیس بیان کرتا ہے اور اپ ڈیٹ خودکار طور پر انجام پاتے ہیں۔
  • View Protocol اپنی body پراپرٹی کے ساتھ کسی بھی SwiftUI UI جزو کی بنیاد ہے، جو ویو کمپوزیشن کے ذریعے اسکرین کی وضاحت لوٹاتا ہے۔
  • Property Wrappers — @State، @Binding، @ObservedObject، @StateObject — حالت کا انتظام کرتے ہیں اور ڈیٹا تبدیل ہونے پر دوبارہ ڈرائنگ کو متحرک کرتے ہیں۔
  • NavigationStack (iOS 16+) ٹائپ سیف راستوں اور اعلانیہ ٹرانزیشنز کے ساتھ ایک جدید نیویگیشن API ہے۔
  • Modifier کلاس انہرٹینس کے بغیر ویوز کی ظاہری شکل اور رویے کو اپنی مرضی کے مطابق بنانے کے لیے کالز کا ایک سلسلہ ہے۔

SwiftUI کیا ہے؟

SwiftUI ایک اعلانیہ فریم ورک ہے جسے Apple نے 2019 میں نئے پروجیکٹس میں UIKit کو تبدیل کرنے کے لیے متعارف کرایا۔ دستی طور پر UIView انسٹینسز بنانے اور انہیں درجہ بندی میں شامل کرنے کے بجائے، ڈیولپر View پروٹوکول پر عمل کرنے والی ساختوں کے ذریعے انٹرفیس بیان کرتا ہے۔ SwiftUI خود بخود موجودہ اور نئی حالت کے درمیان فرق کا حساب لگاتا ہے اور اپنے رینڈرنگ انجن کا استعمال کرتے ہوئے صرف تبدیل شدہ حصوں کو دوبارہ رینڈر کرتا ہے۔

فریم ورک Swift میں ویلیو سیمینٹکس (کلاسز نہیں، ساختیں) کا استعمال کرتے ہوئے لکھا گیا ہے، جو UI اجزاء کو ہلکا اور تھریڈ سیف بناتا ہے۔ UIKit کے برعکس، جہاں Objective-C رن ٹائم کی وجہ سے UIViewController 200+ بائٹس کا ہو سکتا ہے، SwiftUI View صرف چند بائٹس کی ایک سادہ ساخت ہے۔ یہ خاص طور پر محدود میموری والے watchOS کے لیے اہم ہے۔

SwiftUI کراس پلیٹ فارم

وہی View وضاحت iPhone، iPad، Mac، Apple Watch، Apple TV اور Apple Vision Pro پر کام کرتی ہے۔ SwiftUI انٹرفیس کو پلیٹ فارم کے مطابق ڈھالتا ہے: iOS پر ٹچ جیسچرز، macOS پر کی بورڈ کمبینیشنز، watchOS پر Digital Crown اسکرولنگ۔ یہ متعدد Apple پلیٹ فارمز پر ایپ جاری کرنے والی کمپنیوں کے لیے ترقیاتی وقت کم کرتا ہے لیکن ہر پلیٹ فارم کے مخصوص عناصر کے لیے اضافی ترتیب کی ضرورت ہوتی ہے۔

View Protocol اور ویو کا جسم

SwiftUI میں، ہر اسکرین ایک ساخت ہے جو View پروٹوکول کو ایک ہی ضرورت کے ساتھ لاگو کرتی ہے: some View قسم کی ایک حسابی پراپرٹی body۔ some کلیدی لفظ (اوپیک قسم) ویو کی ٹھوس قسم کو چھپاتا ہے، جس سے SwiftUI رینڈرنگ کو بہتر بنا سکتا ہے۔ body کے اندر، ڈیولپر ViewBuilder کا استعمال کرتے ہوئے تیار شدہ اجزاء — Text، Image، Button، List — کو جوڑتا ہے، جو متعدد ویوز کو ایک میں جمع کرتا ہے۔

swift
struct GreetingView: View {
    let name: String

    var var body: some View {
        VStack {
            Text("ہیلو، \(name)!")
                .font(.title)
                .foregroundColor(.blue)
            Image(systemName: "hand.wave")
                .imageScale(.large)
        }
        .padding()
    }
}

مثال میں، VStack (عمودی اسٹیک) میں Text اور Image ہیں۔ name کی قیمت ساخت کے انیشیالائزر کے ذریعے بھیجی جاتی ہے — اس طرح SwiftUI میں بیرونی DI کنٹینرز کے بغیر DI (انحصار انجیکشن) کام کرتا ہے۔ ہر موڈیفائر اصل کو تبدیل کیے بغیر، لاگو تبدیلی کے ساتھ ایک نیا ویو لوٹاتا ہے۔ یہ ویلیو ٹائپس کی ناقابل تغیریت کی بدولت ممکن ہے۔

ViewBuilder اور شرائط

ViewBuilder ایک ریزلٹ بلڈر ہے جو @resultBuilder سے منسوب ہے، جو 10 ویوز کو ایک میں جمع کرتا ہے۔ body کے اندر اضافی ریپرز کے بغیر if/else، switch اور ForEach استعمال کیا جا سکتا ہے۔ ForEach Identifiable عناصر کے ساتھ کام کرتا ہے — داخل کرنے/حذف کرنے پر درست اینیمیشن کے لیے ہر ویو کو ایک منفرد id تفویض کی جاتی ہے۔

حالت کا انتظام: @State، @Binding، @ObservedObject

SwiftUI میں، حالت اسکرین پر ظاہر ہونے والے مواد کا تعین کرتی ہے۔ جب حالت بدلتی ہے، SwiftUI منحصر ویو کے body کو دوبارہ بناتا ہے اور ڈیف الگورتھم کا استعمال کرتے ہوئے نتیجے کا پچھلے سے موازنہ کرتا ہے۔ حالت کو ذخیرہ کرنے کے لیے پراپرٹی ریپر استعمال کیے جاتے ہیں — ہر ایک اپنے مخصوص کام کو حل کرتا ہے: مقامی حالت، چائلڈ ویو سے کنکشن، یا بیرونی ڈیٹا ماڈل۔

swift
struct CounterView: View {
    @State private var count = 0

    var var body: some View {
        VStack {
            Text("کاؤنٹر: \(count)")
            Button("بڑھائیں") {
                count += 1
            }
        }
    }
}

class UserViewModel: ObservableObject {
    @Published var name = ""
    @Published var age = 0
}

@State View ساخت کے اندر ایک مقامی سادہ قیمت (Int، String، Bool) ذخیرہ کرتا ہے۔ SwiftUI میموری کو ساخت سے علیحدہ اسٹوریج میں منتقل کرتا ہے — لہذا @State والی پراپرٹی کو تبدیل کیا جا سکتا ہے چاہے View ویلیو ٹائپ ہی کیوں نہ ہو۔ @ObservableObject @Published پراپرٹیز والی کلاسز کے لیے ہے، جن کی تبدیلیاں خود بخود SwiftUI کو دوبارہ ڈرائنگ کی ضرورت کے بارے میں آگاہ کرتی ہیں۔

@Binding اور والدین-بچہ کنکشن

@Binding والدین ویو میں موجود ڈیٹا سورس کے ساتھ دو طرفہ کنکشن بناتا ہے۔ والدین $variable (پروجیکٹڈ ویلیو) بھیجتا ہے، اور بچہ بائنڈنگ کے ذریعے قیمت پڑھتا اور لکھتا ہے۔ یہ والدین میں حالت رکھتے ہوئے ٹیکسٹ ان پٹ یا ٹوگل کو علیحدہ جزو میں منتقل کرنے کی اجازت دیتا ہے۔ @Binding کے بغیر، ہر تبدیلی کو نئی قیمت اوپر بھیجنے کے لیے کال بیک کلوزر کی ضرورت ہوگی۔

iOS 16 سے پہلے، SwiftUI میں نیویگیشن NavigationView پر بنائی گئی تھی — iPad پر پیچیدہ رویے (سپلٹ ویو، ڈبل کالم) والا ایک لیگیسی API۔ iOS 16 سے شروع کرتے ہوئے، Apple NavigationStack کی سفارش کرتا ہے — ٹائپ سیف راستوں کے ساتھ ایک آسان متبادل۔ ڈیولپر ممکنہ راستوں کا ایک انم متعین کرتا ہے، اور NavigationStack ڈیپ لنکس اور جڑ میں واپسی کے سپورٹ کے ساتھ خود بخود اسکرین اسٹیک کا انتظام کرتا ہے۔

swift
enum Route: Hashable {
    case detail(id: Int)
    case settings
}

struct ContentView: View {
    var var body: some View {
        NavigationStack {
            List {
                NavigationLink("تفصیل اسکرین",
                               value: Route.detail(id: 42))
                NavigationLink("ترتیبات",
                               value: Route.settings)
            }
            .navigationDestination(for: Route.self) { route in
                switch route {
                case .detail(let id): DetailView(id: id)
                case .settings: SettingsView()
                }
            }
        }
    }
}

Hashable کے مطابق راستے پیرامیٹرز بھیجنے کے لیے کسی بھی ڈیٹا ٹائپ کے استعمال کی اجازت دیتے ہیں۔ navigationDestination(for:destination:) راستے کی قسم کو ہدف ویو سے منسلک کرتا ہے۔ UIKit نیویگیشن پر فائدہ یہ ہے کہ نیا راستہ شامل کرتے وقت دوبارہ ڈرائنگ کی ضرورت نہیں: بس انم میں ایک کیس اور سوئچ میں ہینڈلر شامل کریں۔ ڈیپ لنکس NavigationStack پر processDeepLink کے ذریعے ہینڈل کیے جاتے ہیں۔

پروگرامیٹک نیویگیشن

پروگرامیٹک نیویگیشن (لاگ ان، ٹائمر یا سرور رسپانس کے بعد) کے لیے NavigationLink انیشیالائزر کے ساتھ @State استعمال کیا جاتا ہے: NavigationLink(isActive: $isActive)۔ جب isActive = true ہوتا ہے، صارف کے چھوئے بغیر ٹرانزیشن ہوتی ہے۔ ایک متبادل NavigationStack میں $path ایری کو بائنڈ کرنا ہے: $path.append(Route.detail(id: 1))۔

View Modifier — ظاہری شکل کی تخصیص

Modifier ایک طریقہ ہے جو ویو کی ترمیم شدہ کاپی لوٹاتا ہے۔ UIKit کے برعکس، جہاں پراپرٹی کنفیگریشن موجودہ ویو کو تبدیل کرکے کی جاتی ہے، SwiftUI لاگو تبدیلی کے ساتھ ایک نیا ویلیو بناتا ہے۔ موڈیفائر چیننگ ترتیب وار تبدیلیوں سے حتمی انٹرفیس بناتی ہے: فونٹ → پیڈنگ → رنگ → سایہ → جیسچر۔

Apple 200 سے زیادہ بلٹ ان موڈیفائر فراہم کرتا ہے۔ سب سے عام: .font()، .foregroundColor()، .padding()، .background()، .cornerRadius()، .shadow()، .opacity()، .offset()۔ موڈیفائر کی ترتیب اہم ہے: .padding() سے پہلے .background() پیڈنگ والے علاقے کو بھرتا ہے، بعد میں — صرف اندرونی علاقے کو۔ کسٹم موڈیفائر ViewModifier پروٹوکول کے ذریعے بنائے جاتے ہیں۔

مشروط موڈیفائر اور اینیمیشن

موڈیفائر کو ternary آپریٹر کے ذریعے مشروط طور پر لاگو کیا جا سکتا ہے: .foregroundColor(isError ? .red : .primary)۔ اینیمیشن کے لیے .animation(.easeInOut, value: state) استعمال کیا جاتا ہے — اینیمیشن موڈیفائر ایک مخصوص حالت پراپرٹی سے منسلک ہوتا ہے۔ جب یہ پراپرٹی بدلتی ہے، SwiftUI پرانی اور نئی قیمت کے درمیان ٹرانزیشن کو اینیمیٹ کرتا ہے۔ اینیمیشن opacity، offset، scale، rotation، سائز اور رنگ کے ساتھ کام کرتی ہے — ہر پراپرٹی کا ایک متعلقہ AnimatableParameter ہے۔

کسٹم اینیمیشنز کے لیے، .transition (ظاہر ہونا/غائب ہونا) اور .matchedGeometryEffect (دو کنٹینرز کے درمیان کسی عنصر کا ہموار ٹرانزیشن) دستیاب ہیں۔ مؤخر الذکر فہرستوں میں ہیرو اینیمیشن کے لیے استعمال ہوتا ہے: فہرست سیل میں ایک آئیکن تفصیلی اسکرین پر بڑی تصویر میں آہستہ سے تبدیل ہو جاتا ہے۔

SwiftUI بمقابلہ UIKit: طریقوں کا موازنہ

SwiftUI اور UIKit کے درمیان انتخاب iOS ڈیولپر کے پہلے مخمصوں میں سے ایک ہے۔ دونوں فریم ورک Apple کے ذریعے تعاون یافتہ ہیں لیکن انٹرفیس بنانے کے مسئلے کو بنیادی طور پر مختلف طریقوں سے حل کرتے ہیں: SwiftUI اعلانیہ طور پر، UIKit لازمی طور پر۔ فرق حالت کے انتظام، نیویگیشن، کارکردگی اور مطابقت میں ظاہر ہوتا ہے۔

پہلوSwiftUIUIKit
طریقہاعلانیہ: کیا دکھانا ہےلازمی: کیسے بنانا ہے
حالتProperty Wrappers، خودکار دوبارہ ڈرائنگدستی: reloadData، setNeedsLayout
UI کوڈکمپیکٹ، موڈیفائر چینزتفصیلی، NSCoder/Storyboard/محدودیتیں
کارکردگیiOS 17+ پر اعلی، ڈیف الگورتھمiOS 12–16 پر عروج، براہ راست کنٹرول
کم سے کم ورژنiOS 15+ (مکمل سپورٹ)iOS 2+ (تمام ورژن)

کم سے کم iOS 17 ورژن والے نئے پروجیکٹس کے لیے، Apple SwiftUI کو بنیادی فریم ورک کے طور پر تجویز کرتا ہے۔ UIKit رینڈرنگ پر باریک کنٹرول (کسٹم UICollectionViewLayout، پیچیدہ CAAnimation مناظر) یا iOS 12–14 کے سپورٹ کی ضرورت والے انٹرفیس کے لیے ضروری ہے۔ بہت سے پروجیکٹ ہائبرڈ طریقہ استعمال کرتے ہیں: UIHostingController کے ذریعے SwiftUI کو UIKit ایپ میں ایمبیڈ کیا جاتا ہے، اور UIViewRepresentable SwiftUI درجہ بندی کے اندر UIKit اجزاء کے استعمال کی اجازت دیتا ہے۔

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

کیا ایک ہی پروجیکٹ میں SwiftUI اور UIKit استعمال کیا جا سکتا ہے؟

ہاں، UIHostingController (SwiftUI in UIKit) اور UIViewRepresentable (UIKit in SwiftUI) کے ذریعے۔ یہ ایک ہائبرڈ طریقہ ہے، منتقلی کے دوران مقبول۔

SwiftUI پروجیکٹ کس iOS ورژن سے شروع کرنا چاہیے؟

iOS 17 مکمل فعالیت فراہم کرتا ہے: NavigationStack، Observation framework، Swift Charts۔ iOS 15 پروڈکشن کے لیے کم از کم حد ہے۔

SwiftUI کبھی کبھی انٹرفیس کو اپ ڈیٹ کیوں نہیں کرتا؟

سب سے عام وجہ بیک گراؤنڈ تھریڈ پر @Published پراپرٹی کو تبدیل کرنا ہے۔ ObservableObject کو main actor پر تبدیلیاں بھیجنی چاہئیں: @MainActor class ViewModel۔

SwiftUI میں بٹن دبانے کے ڈیباؤنس کو کیسے ہینڈل کریں؟

Combine کے ذریعے .debounce استعمال کریں: Button.publisher(for: .tap) .debounce(for: .seconds(0.3), scheduler: RunLoop.main)۔

کیا SwiftUI کسٹم جیسچرز کو سپورٹ کرتا ہے؟

ہاں، Gesture موڈیفائر کے ذریعے: DragGesture، LongPressGesture، MagnificationGesture، RotationGesture۔ .simultaneousGesture() اور .sequenced() استعمال کرکے انہیں یکجا کریں۔

خلاصہ

  • SwiftUI Apple کا ایک اعلانیہ فریم ورک ہے جہاں انٹرفیس کو حالت کے انتظام کے لیے پراپرٹی ریپرز کے ساتھ View ساختوں کی ترکیب کے طور پر بیان کیا جاتا ہے۔
  • View Protocol حسابی پراپرٹی body کے ساتھ کسی بھی ویو کے لیے واحد داخلے کا مقام ہے۔ ViewBuilder اضافی کنٹینرز کے بغیر 10 ویوز تک کو ایک میں جمع کرتا ہے۔
  • @State، @Binding اور @ObservedObject ڈیٹا مینجمنٹ کے تمام منظرناموں کا احاطہ کرتے ہیں: مقامی حالت، والدین-بچہ کنکشن اور بیرونی ماڈل۔
  • NavigationStack نے ٹائپ سیف انم راستوں کے ساتھ NavigationView کی جگہ لے لی، ڈیپ لنکس اور پروگرامیٹک نیویگیشن کے سپورٹ کو شامل کیا۔
  • Modifier ایک اہم SwiftUI پیٹرن ہے جو انہرٹینس کے بغیر کالز کے سلسلے کے ذریعے ویوز کی ظاہری شکل کو اپنی مرضی کے مطابق بنانے کی اجازت دیتا ہے۔
  • SwiftUI اور UIKit UIHostingController اور UIViewRepresentable کے ذریعے ایک ساتھ رہتے ہیں، بتدریج پروجیکٹ منتقلی کی اجازت دیتے ہیں۔
  • iOS 17+ کے لیے، Apple SwiftUI کو بنیادی فریم ورک کے طور پر تجویز کرتا ہے؛ UIKit پیچیدہ کسٹم انٹرفیس اور پرانے ورژنز کے سپورٹ کے لیے رہتا ہے۔

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

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

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

مزید پڑھیں