Swift Apple کی ایک جدید پروگرامنگ زبان ہے، جو WWDC 2014 میں Objective-C کے متبادل کے طور پر پیش کی گئی۔ Swift محفوظ ٹائپنگ، خودکار میموری نظم و نسق ARC (Automatic Reference Counting) اور پروٹوکول پر مبنی نقطہ نظر کو یکجا کرتی ہے۔ Swift Programming Language نحو اور معیاری لائبریری کا بنیادی ذریعہ ہے۔
اہم نکات
Swift ایک کثیر نمونہ پروگرامنگ زبان ہے جسے Apple نے iOS، macOS، watchOS، tvOS اور visionOS کے لیے تیار کیا ہے۔ زبان کے اہم مقاصد: حفاظت، رفتار اور نحوی اظہاریت۔ Swift LLVM کمپائلر استعمال کرتی ہے اور C++ کے مقابلے کی کارکردگی کے ساتھ بہتر مشین کوڈ تیار کرتی ہے۔
2014 میں ریلیز کے بعد سے Swift 6 بڑے ورژنز سے گزر چکی ہے۔ Swift 6 (2024) نے متوازی کوڈ کی تنہائی کے سخت کنٹرول کے ذریعے مکمل ڈیٹا ریس سیفٹی ماڈل متعارف کرایا۔ GitHub Octoverse 2025 کے مطابق، Swift کمیونٹی کی ترقی میں سرفہرست 10 زبانوں میں شامل ہے، Apple پلیٹ فارمز پر اپنانے کی رفتار میں Rust اور Kotlin سے آگے ہے۔
Swift اوپن سورس اور کراس پلیٹ فارم ہے — سورس کوڈ GitHub (Swift Open Source) پر شائع ہوتا ہے۔ Apple پلیٹ فارمز کے علاوہ، Swift Linux اور Windows پر سرور سائیڈ ڈویلپمنٹ (Vapor, Hummingbird) کے لیے استعمال ہوتی ہے، اگرچہ اس کا بنیادی شعبہ Apple ایکو سسٹم میں موبائل اور ڈیسک ٹاپ ڈویلپمنٹ ہے۔
منتقلی کی بنیادی وجوہات: Swift Objective-C میں ممکنہ غلطیوں کی پوری کلاسز کو ختم کرتی ہے۔ ٹائپ سیفٹی مرتب وقت پر ٹائپ کی عدم مطابقت کو روکتی ہے۔ Optionals nil ڈی ریفرنسنگ کو ختم کرتے ہیں۔ ARC پہلے دن سے شامل ہے، Objective-C میں MRC/ARC کے برعکس۔ Swift کا نحو چھوٹا اور زیادہ پڑھنے کے قابل ہے — مطالعات مساوی کاموں کے لیے Objective-C کے مقابلے میں کوڈ کے حجم میں 30-40% کمی ظاہر کرتی ہیں۔
بنیادی Swift نحو واقف C نما ڈھانچوں کو فعلی زبانوں کے عناصر کے ساتھ جوڑتا ہے۔ متغیرات var سے، مستقل let سے اعلان کیے جاتے ہیں۔ کمپائلر type inference استعمال کرتا ہے، لہذا واضح ٹائپ تشریح صرف ابہام کی صورت میں ضروری ہے۔
import Foundation
// مستقل اور متغیرات
let name = "Swift"
var version = 6.0
var count: Int = 42
// ڈیفالٹ پیرامیٹر والے فنکشن
func greet(person: String, greeting: String = "Hello") -> String {
return "\(greeting), \(person)!"
}
// جلد خارج ہونے کے لیے Guard-let
func parse(input: String?) -> Int {
guard let value = input, let number = Int(value) else {
return 0
}
return number
}Switch اور پیٹرن میچنگ Swift میں C اور Kotlin سے زیادہ طاقتور ہیں۔ Switch ٹوپلز، رینجز، where شرائط اور ویلیو بائنڈنگ کے ساتھ مماثلت کی حمایت کرتا ہے۔ کمپائلر تمام کیسز کی جامع کوریج چیک کرتا ہے — ڈیفالٹ کی عدم موجودگی غلطی نہیں ہے اگر تمام ممکنہ اقدار کور ہوں۔
let point = (x: 3, y: -1)
switch point {
case (0, 0):
print("اصل نقطہ")
case let (x, y) where x == y:
print("X برابر ہے Y کے")
case let (x, y) where abs(y) > x:
print("Y کی مطلق قیمت X سے بڑی ہے")
default:
print("نقطہ (\(point.x), \(point.y))")
}Optionals Swift کا ایک مرکزی تصور ہے جو ٹائپ سسٹم کی سطح پر null حوالہ مسئلہ حل کرتا ہے۔ Optional
var optionalString: String? = "Hello"
optionalString = nil // اجازت ہے
// Optional Binding — محفوظ نکالنا
if let text = optionalString {
print("متن: \(text)")
} else {
print("قدر موجود نہیں")
}
// Optional Chaining — خصوصیات تک محفوظ رسائی
let length = optionalString?.count ?? 0
// Nil-coalescing آپریٹر
let greeting = optionalString ?? "Default"Optional Chaining آپریٹر ?. کے ساتھ اختیاری قدر کے طریقوں کو محفوظ طریقے سے کال کرنے اور خصوصیات تک رسائی کی اجازت دیتا ہے۔ اگر سلسلہ nil سے ٹوٹ جاتا ہے تو پورے اظہار کا نتیجہ nil ہوتا ہے۔ Nil-coalescing (??) ایک ڈیفالٹ قدر فراہم کرتا ہے اور پلیس ہولڈر متن دکھانے کے لیے UI کوڈ میں وسیع پیمانے پر استعمال ہوتا ہے۔
پروٹوکول Swift میں ایک معاہدہ طے کرتے ہیں — خصوصیات اور طریقوں کا ایک مجموعہ۔ Java انٹرفیس کے برعکس، Swift پروٹوکول میں پروٹوکول توسیعات (protocol extensions) کے ذریعے ڈیفالٹ نفاذ ہو سکتے ہیں۔ یہ پروٹوکول پر مبنی پروگرامنگ کی بنیاد ہے، جو کلاس وراثت کے بجائے Apple کا تجویز کردہ طریقہ ہے۔
protocol NamedEntity {
var name: String { get }
func description() -> String
}
// توسیع کے ذریعے ڈیفالٹ نفاذ
extension NamedEntity {
func description() -> String {
return "Entity: \(name)"
}
}
// توسیع کے ذریعے مطابقت
extension String: NamedEntity {
var name: String { return self }
}پروٹوکول توسیعات ہر مطابق قسم کو تبدیل کیے بغیر پروٹوکول میں طریقے شامل کرنے کی اجازت دیتی ہیں۔ یہ عام افادیت شامل کرنے کے لیے خاص طور پر مفید ہے: Sequence کے لیے map، filter، reduce، یا JSON سیریلائزیشن کے لیے Codable۔ Apple نے بہت سے فریم ورکس (SwiftUI, Combine) کو توسیعات کے ساتھ پروٹوکول پر بنایا۔
بندشیں (Closures) Swift میں گمنام فنکشن ہیں جو بیرونی سیاق و سباق سے متغیرات کو گرفت میں لیتے ہیں۔ نحوی طور پر، بندشیں Kotlin میں lambdas سے ملتی جلتی ہیں لیکن زیادہ لچکدار نحو کے ساتھ: trailing closure، مختصر دلیل نام ($0, $1) اور autoclosures۔
// سیاق و سباق کی گرفت کے ساتھ بندش
let numbers = [5, 3, 8, 1, 9]
// Trailing closure syntax
let sorted = numbers.sorted { $0 < $1 }
// فعلی زنجیر
let result = numbers
.filter { $0 > 3 }
.map { $0 * 2 }
.reduce(0, +)
// فنکشن پیرامیٹر کے طور پر بندش
func performAsync(completion: @escaping (Result<Data, Error>) -> Void) { }@escaping بندشیں اس وقت استعمال ہوتی ہیں جب بندش فنکشن کی واپسی کے بعد عمل میں آتی ہے — عام طور پر نیٹ ورک کی درخواستوں اور غیر متزامن کارروائیوں کے لیے۔ @autoclosure خود بخود ایک اظہار کو بندش میں لپیٹ دیتا ہے، جو assert اور شارٹ سرکٹ منطق میں استعمال ہوتا ہے۔
struct اور class کے درمیان انتخاب Swift ماڈل ڈیزائن کرتے وقت پہلے فیصلوں میں سے ایک ہے۔ Apple ڈیفالٹ طور پر struct (قدر کی قسم) استعمال کرنے اور صرف وراثت یا حوالہ شناخت کی ضرورت ہونے پر class (حوالہ کی قسم) پر جانے کی سفارش کرتا ہے۔
| خصوصیت | Struct | Class |
|---|---|---|
| منتقلی کی قسم | قدر سے (نقل) | حوالہ سے |
| وراثت | معاون نہیں | معاون |
| ARC نظم و نسق | ضروری نہیں | ARC (حوالہ گنتی) |
| ڈی انیشیالائزر deinit | نہیں | ہاں |
| تبدیلی پذیری | خصوصیات تبدیل کرنے کے لیے mutating func | کوئی بھی طریقہ تبدیل کر سکتا ہے |
| مجموعات میں ذخیرہ | اندراج پر نقل ہوتا ہے | حوالہ ذخیرہ ہوتا ہے |
قدر کی اقسام (struct) کثیر الثریڈ ماحول میں زیادہ محفوظ ہیں — ہر تھریڈ کو ایک آزاد نقل ملتی ہے۔ حوالہ کی اقسام (class) UIKit (UIView, UIViewController) کے ساتھ کام کرنے کے لیے ضروری ہیں، جہاں حوالہ شناخت اور نظام کی کلاسوں سے وراثت درکار ہے۔
ARC (Automatic Reference Counting) حوالہ کی اقسام کے لیے Swift کا میموری نظم و نسق کا نظام ہے۔ کمپائلر رن ٹائم میں retain/release کالز داخل کرتا ہے، کسی آبجیکٹ پر مضبوط حوالوں کی تعداد کو ٹریک کرتا ہے۔ جب کاؤنٹر صفر تک پہنچتا ہے، آبجیکٹ فوری طور پر آزاد ہو جاتا ہے۔
ARC کا بنیادی مسئلہ چکری حوالے (retain cycles) ہیں۔ جب دو آبجیکٹ ایک دوسرے پر مضبوط حوالے رکھتے ہیں، میموری کبھی آزاد نہیں ہوتی۔ حل کمزور حوالے (weak، آزاد ہونے پر خود بخود nil ہو جاتے ہیں) اور unowned حوالے (اس بات کی ضمانت کہ آبجیکٹ زندہ ہے) ہیں۔
class ProfileViewController: UIViewController {
var onLogout: (() -> Void)?
func setupHandler() {
// [weak self] retain cycle کو روکتا ہے
onLogout = { [weak self] in
guard let self else { return }
self.dismiss(animated: true)
}
}
}بندشوں میں چکری حوالوں کو روکنے کے لیے، [weak self] استعمال کریں guard let self = self else { return } کے ساتھ۔ یہ قاعدہ UIKit میں خاص طور پر اہم ہے، جہاں ViewController اپنی خصوصیات پر مضبوط حوالے رکھتا ہے اور ان خصوصیات کے اندر بندشیں ViewController کا حوالہ دیتی ہیں۔
اکثر پوچھے گئے سوالات
Swift Int، Double، Float، String، Bool، Array، Set، Dictionary اور ٹوپلز کو سپورٹ کرتی ہے۔ عددی اقسام کا مقررہ سائز ہوتا ہے: Int8، Int16، Int32، Int64 اور غیر نشان زدہ UInt۔ تاریخوں کے لیے Foundation سے Date استعمال ہوتا ہے، ڈیٹا کے لیے — Data۔
Optional دو کیسز والا ایک enum ہے: .none (nil) اور .some(Wrapped)۔ Swift کو if let، guard let یا ?? کے ذریعے واضح Optional جانچ درکار ہے، جو NullPointerException کو ختم کرتا ہے۔ اختیاری زنجیریں (?.) نیسٹڈ اختیاری اقدار کی خصوصیات تک محفوظ رسائی کی اجازت دیتی ہیں۔
Struct — قدر کی قسم، اسائنمنٹ پر نقل ہوتا ہے، وراثت کو سپورٹ نہیں کرتا، ARC درکار نہیں۔ Class — حوالہ کی قسم، حوالہ سے منتقل ہوتا ہے، وراثت اور ڈی انیشیالائزر کو سپورٹ کرتا ہے۔ Apple ڈیفالٹ قسم کے طور پر struct کی سفارش کرتا ہے۔
ARC خود بخود کلاس آبجیکٹس پر مضبوط حوالوں کو گنتی ہے۔ جب کاؤنٹر صفر ہو جاتا ہے، میموری آزاد ہو جاتی ہے۔ چکری حوالوں کو روکنے کے لیے weak (خودکار nil) اور unowned(ضمانتی عمر) استعمال کریں۔ ARC کا اطلاق struct اور enum پر نہیں ہوتا۔
پروٹوکول پر مبنی پروگرامنگ ایک طریقہ ہے جو کلاس کے درجہ بندی کے بجائے توسیعات کے ساتھ پروٹوکول استعمال کرتا ہے۔ پروٹوکول میں پروٹوکول توسیعات کے ذریعے ڈیفالٹ طریقہ کار کے نفاذ ہو سکتے ہیں۔ یہ وراثت کے بغیر کوڈ کے دوبارہ استعمال کی اجازت دیتا ہے، لچک اور جانچ کی اہلیت کو برقرار رکھتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔