মোবাইল ডেভেলপমেন্টে 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 — কন্টেইনারে একাধিক View-এর জন্য 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 হল View-এর জন্য Result Builder। এটি return এবং TupleView ছাড়াই একটি ক্লোজারের ভিতরে একাধিক View লেখার অনুমতি দেয়। এটি 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 — স্থানীয় অবস্থা (value type)। @Binding — প্যারেন্ট অবস্থার সাথে সংযোগ। @StateObject — ObservableObject তৈরি করে। SwiftUI অবজেক্টের লাইফসাইকেল পরিচালনা করে। @ObservedObject — বাহ্যিক ObservableObject পর্যবেক্ষণ করে। @EnvironmentObject — পরিবেশ থেকে অবজেক্ট (.environmentObject()-এর মাধ্যমে ডিপেন্ডেন্সি ইনজেকশন)। @Environment — সিস্টেম মান (.colorScheme, .locale)। @AppStorage — UserDefaults। @FetchRequest — Core Data কোয়েরি। @FocusState — ইনপুট ফোকাস।

র্যাপার উদ্দেশ্য মালিকানা
@Stateস্থানীয় অবস্থা (value type)View-এর মালিকানা
@Bindingপ্যারেন্ট অবস্থার সাথে সংযোগপ্যারেন্টের মালিকানা
@StateObjectObservableObject তৈরিView-এর মালিকানা
@ObservedObjectবাহ্যিক অবজেক্ট পর্যবেক্ষণবাহ্যিক মালিক
@EnvironmentObjectপরিবেশ থেকে অবজেক্টপূর্বপুরুষের মালিকানা
@Environmentসিস্টেম মানসিস্টেম
@AppStorageUserDefaultsUserDefaults
@FocusStateইনপুট ফোকাসView-এর মালিকানা

@StateObject বনাম @ObservedObject: @StateObject একটি অবজেক্ট তৈরি করে, @ObservedObject তা পর্যবেক্ষণ করে। শ্রেণিবিন্যাসে প্রথম মডেল তৈরির জন্য @StateObject ব্যবহার করুন, চাইল্ড ভিউতে পাস করার জন্য @ObservedObject। @FocusState — ফোকাস ব্যবস্থাপনা: .focused($field, equals: .email)। একাধিক ফিল্ডের জন্য enum সমর্থন করে।

Environment Values এবং DI

@Environment — সিস্টেম মান: colorScheme, locale, sizeCategory, layoutDirection, managedObjectContext। কাস্টম Environment Values — 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 একাধিক View-এর জন্য 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 — একাধিক View-এর জন্য ডিক্লেয়ারেটিভ সিনট্যাক্স। 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন