اہم نکات
View Protocol SwiftUI کا مرکزی پروٹوکول ہے۔ اسے صرف ایک پراپرٹی درکار ہے: var body: some View۔ body ایک computed property ہے جو UI کی تفصیل لوٹاتا ہے۔ SwiftUI ہر اسٹیٹ تبدیلی پر body کو کال کرتا ہے اور GPU پر نتیجہ رینڈر کرتا ہے۔
@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() کے ذریعے کسٹم موڈیفائر۔
// @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)
}
}
}NavigationStack (iOS 16+) — ڈیٹا سے چلنے والی نیویگیشن۔ ایک پاتھ (ہیش ایبل اقدار کی صف) لیتا ہے اور navigationDestination کے ذریعے منزل دکھاتا ہے۔ منزل کے نظاروں کے ساتھ NavigationLink کی جگہ لیتا ہے۔ NavigationLink — اسٹیک میں نیویگیٹ کرنے کا بٹن۔ List — سیکشنز، سوائپ، ڈیلیٹ اور ڈریگ اینڈ ڈراپ کے ساتھ عمودی فہرست۔ Form — سیٹنگز کے لیے مخصوص List: سیکشنز، چنندہ، ٹوگلز، ٹیکسٹ فیلڈز۔ Section — ہیڈر اور فوٹر کے ساتھ List/Form میں گروپنگ۔ ViewModifier — اسٹائل کو دوبارہ استعمال کرنے کے لیے کسٹم موڈیفائر۔ .modifier(CustomModifier()) — اطلاق۔
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 کے ساتھ پیمانہ کرتا ہے۔
Property Wrappers SwiftUI میں اسٹیٹ مینجمنٹ کی بنیاد ہیں۔ @State — مقامی اسٹیٹ (ویلیو ٹائپ)۔ @Binding — والدین کی اسٹیٹ سے کنکشن۔ @StateObject — ObservableObject بناتا ہے۔ SwiftUI آبجیکٹ کے لائف سائیکل کا انتظام کرتا ہے۔ @ObservedObject — بیرونی ObservableObject کا مشاہدہ کرتا ہے۔ @EnvironmentObject — ماحول سے آبجیکٹ (.environmentObject() کے ذریعے ڈیپنڈنسی انجیکشن)۔ @Environment — سسٹم ویلیوز (.colorScheme، .locale)۔ @AppStorage — UserDefaults۔ @FetchRequest — Core Data کوئری۔ @FocusState — ان پٹ فوکس۔
| ریپر | مقصد | ملکیت |
|---|---|---|
| @State | مقامی اسٹیٹ (ویلیو ٹائپ) | View کی ملکیت |
| @Binding | والدین کی اسٹیٹ سے کنکشن | والدین کی ملکیت |
| @StateObject | ObservableObject بناتا ہے | View کی ملکیت |
| @ObservedObject | بیرونی آبجیکٹ کا مشاہدہ | بیرونی مالک |
| @EnvironmentObject | ماحول سے آبجیکٹ | آباؤ اجداد کی ملکیت |
| @Environment | سسٹم ویلیو | سسٹم |
| @AppStorage | UserDefaults | UserDefaults |
| @FocusState | ان پٹ فوکس | View کی ملکیت |
@StateObject بمقابلہ @ObservedObject: @StateObject ایک آبجیکٹ بناتا ہے، @ObservedObject اس کا مشاہدہ کرتا ہے۔ درجہ بندی میں پہلا ماڈل بنانے کے لیے @StateObject استعمال کریں، چائلڈ ویوز میں بھیجنے کے لیے @ObservedObject۔ @FocusState — فوکس مینجمنٹ: .focused($field, equals: .email)۔ متعدد فیلڈز کے لیے enum کو سپورٹ کرتا ہے۔
@Environment — سسٹم ویلیوز: colorScheme، locale، sizeCategory، layoutDirection، managedObjectContext۔ کسٹم ماحولی اقدار — EnvironmentKey کے ذریعے کسٹم ویلیو۔ ڈیپنڈنسی انجیکشن کے لیے استعمال کیا جاتا ہے: واضح پیرامیٹرز کے بغیر سروسز بھیجنا۔ .environment() موڈیفائر — درجہ بندی میں ویلیو سیٹ کرتا ہے۔ @EnvironmentObject — .environmentObject() سے ObservableObject۔ @Environment سے مختلف ہے کیونکہ یہ ریفرنس ٹائپ بھیجتا ہے۔ IT Sectr سسٹم ویلیوز کے لیے @Environment اور سروسز کے لیے @EnvironmentObject تجویز کرتا ہے۔
.task{} — ویو ظاہر ہونے پر غیر متزامن آپریشن۔ غائب ہونے پر خودکار منسوخی۔ async/await کے لیے .onAppear کی جگہ لیتا ہے۔ .onAppear{} — ظاہر ہونے پر متزامن آپریشن۔ .onDisappear{} — غائب ہونے پر آپریشن۔ .onChange(of:) — ویلیو تبدیلیوں پر ردعمل۔ .onReceive(Publisher) — Combine پبلشر پر ردعمل۔ SwiftUI میں View کا لائف سائیکل: init → onAppear → body (رینڈرنگ) → onDisappear۔ اسٹیٹ تبدیلی پر: body → diff → دوبارہ رینڈر۔ IT Sectr غیر متزامن لوڈنگ کے لیے .task اور تجزیات کے لیے .onAppear تجویز کرتا ہے۔
.animation() — اینیمیشن موڈیفائر۔ .transition() — ظاہر/غائب اینیمیشن۔ withAnimation — واضح اسٹیٹ تبدیلی اینیمیشن۔ matchedGeometryEffect — مختلف ویوز کے درمیان اینیمیشن (ہیرو اینیمیشن)۔ PhaseAnimator (iOS 17+) — enum پر مبنی کثیر مرحلہ اینیمیشن۔ KeyframeAnimator (iOS 17+) — کی فریموں کے ساتھ فریم بہ فریم اینیمیشن۔ SwiftUI اینیمیشنز Core Animation کے ذریعے GPU پر چلتی ہیں۔ IT Sectr قدرتی اینیمیشنز کے لیے .spring() اور طبعی اثرات کے لیے .interpolatingSpring تجویز کرتا ہے۔
ObservableObject — @Published پراپرٹیز والے آبجیکٹ کے لیے پروٹوکول۔ SwiftUI objectWillChange پبلشر کو سبسکرائب کرتا ہے۔ @Published — پراپرٹی تبدیلیاں شائع کرتا ہے۔ @StateObject — ObservableObject بناتا ہے، لائف سائیکل کا انتظام کرتا ہے۔ @ObservedObject — بیرونی مشاہدہ کرتا ہے۔ Combine — ری ایکٹیو پروگرامنگ کے لیے فریم ورک۔ @EnvironmentObject — ماحول کے ذریعے DI۔ .environmentObject() سیٹ کرتا ہے، @EnvironmentObject پڑھتا ہے۔ MVVM — معیاری فن تعمیر: View (SwiftUI) — ViewModel (ObservableObject) — Model۔ IT Sectr اہم ViewModels کے لیے MVVM + @StateObject تجویز کرتا ہے۔
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 تمام انٹرایکٹو عناصر کے لیے رسائی کے لیبل تجویز کرتا ہے۔
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 (iOS 16+) — چارٹ بنانے کا فریم ورک۔ Chart { } — بنیادی کنٹینر۔ BarMark، LineMark، PointMark، AreaMark، RuleMark — نشانات۔ ڈیٹا کے لیے ForEach۔ ChartAxis — محور کی تخصیص۔ .chartXAxis، .chartYAxis۔ ChartLegend — علامات۔ انٹرپولیشن — catmullRom، linear، step۔ اینیمیشن — Chart کے لیے .animation()۔ IT Sectr بلٹ ان چارٹ کے لیے Swift Charts اور پیچیدہ چارٹ کے لیے Charts (DGCharts) تجویز کرتا ہے۔
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 کو مکمل طور پر بدل دیتا ہے۔
اکثر پوچھے گئے سوالات
View Protocol بنیادی پروٹوکول ہے۔ اسے var body: some View درکار ہے۔ body GPU پر رینڈر کردہ UI کی تفصیل ہے۔
@ViewBuilder متعدد Views کے لیے Result Builder ہے۔ کنٹینرز میں if/else، switch، ForEach کی اجازت دیتا ہے۔
@StateObject ایک آبجیکٹ بناتا ہے۔ @ObservedObject موجودہ کا مشاہدہ کرتا ہے۔ درجہ بندی میں پہلی تخلیق کے لیے @StateObject۔
NavigationStack — ڈیٹا سے چلنے والی نیویگیشن۔ پاتھ پر مبنی، ڈیپ لنکنگ۔ NavigationView کی جگہ لیتا ہے۔
@FocusState — ان پٹ فوکس مینجمنٹ۔ .focused() موڈیفائر۔ متعدد فیلڈز کے لیے enum کو سپورٹ کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔