Swift: یہ کیا ہے، نحو اور زبان کے کلیدی تصورات

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

Swift Apple کی ایک جدید پروگرامنگ زبان ہے، جو WWDC 2014 میں Objective-C کے متبادل کے طور پر پیش کی گئی۔ Swift محفوظ ٹائپنگ، خودکار میموری نظم و نسق ARC (Automatic Reference Counting) اور پروٹوکول پر مبنی نقطہ نظر کو یکجا کرتی ہے۔ Swift Programming Language نحو اور معیاری لائبریری کا بنیادی ذریعہ ہے۔

اہم نکات

  • Swift ایک جامد طور پر ٹائپ شدہ زبان ہے جس میں type inference، Optionals اور پروٹوکول پر مبنی پروگرامنگ ہے
  • Optionals — Optional Binding (if let) اور Optional Chaining (?.) کے ذریعے nil کے ساتھ ٹائپ محفوظ کام
  • ARC — دستی retain/release کے بغیر میموری کے انتظام کے لیے خودکار حوالہ گنتی
  • بندشیں (Closures) — سیاق و سباق کو گرفت میں لینے والے گمنام فنکشن، callback APIs اور فعلی زنجیروں میں استعمال ہوتے ہیں
  • Struct بمقابلہ Class — قدر کی اقسام بمقابلہ حوالہ کی اقسام جو اسائنمنٹ اور وراثت میں مختلف رویہ رکھتی ہیں

Swift کیا ہے؟

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 کی جگہ کیوں لی

منتقلی کی بنیادی وجوہات: Swift Objective-C میں ممکنہ غلطیوں کی پوری کلاسز کو ختم کرتی ہے۔ ٹائپ سیفٹی مرتب وقت پر ٹائپ کی عدم مطابقت کو روکتی ہے۔ Optionals nil ڈی ریفرنسنگ کو ختم کرتے ہیں۔ ARC پہلے دن سے شامل ہے، Objective-C میں MRC/ARC کے برعکس۔ Swift کا نحو چھوٹا اور زیادہ پڑھنے کے قابل ہے — مطالعات مساوی کاموں کے لیے Objective-C کے مقابلے میں کوڈ کے حجم میں 30-40% کمی ظاہر کرتی ہیں۔

نحو اور بنیادی ڈھانچے

بنیادی Swift نحو واقف C نما ڈھانچوں کو فعلی زبانوں کے عناصر کے ساتھ جوڑتا ہے۔ متغیرات var سے، مستقل let سے اعلان کیے جاتے ہیں۔ کمپائلر type inference استعمال کرتا ہے، لہذا واضح ٹائپ تشریح صرف ابہام کی صورت میں ضروری ہے۔

swift
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 شرائط اور ویلیو بائنڈنگ کے ساتھ مماثلت کی حمایت کرتا ہے۔ کمپائلر تمام کیسز کی جامع کوریج چیک کرتا ہے — ڈیفالٹ کی عدم موجودگی غلطی نہیں ہے اگر تمام ممکنہ اقدار کور ہوں۔

swift
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 اور nil کے ساتھ محفوظ کام

Optionals Swift کا ایک مرکزی تصور ہے جو ٹائپ سسٹم کی سطح پر null حوالہ مسئلہ حل کرتا ہے۔ Optional دو کیسز والا enum ہے: .none (nil) اور .some(Wrapped)۔ کمپائلر واضح جانچ کے بغیر Optional استعمال کرنے سے منع کرتا ہے، جو رن ٹائم غلطیوں کی پوری کلاس کو ختم کرتا ہے۔

swift
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 کا تجویز کردہ طریقہ ہے۔

swift
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۔

swift
// سیاق و سباق کی گرفت کے ساتھ بندش
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 (حوالہ کی قسم) پر جانے کی سفارش کرتا ہے۔

خصوصیتStructClass
منتقلی کی قسمقدر سے (نقل)حوالہ سے
وراثتمعاون نہیںمعاون
ARC نظم و نسقضروری نہیںARC (حوالہ گنتی)
ڈی انیشیالائزر deinitنہیںہاں
تبدیلی پذیریخصوصیات تبدیل کرنے کے لیے mutating funcکوئی بھی طریقہ تبدیل کر سکتا ہے
مجموعات میں ذخیرہاندراج پر نقل ہوتا ہےحوالہ ذخیرہ ہوتا ہے

قدر کی اقسام (struct) کثیر الثریڈ ماحول میں زیادہ محفوظ ہیں — ہر تھریڈ کو ایک آزاد نقل ملتی ہے۔ حوالہ کی اقسام (class) UIKit (UIView, UIViewController) کے ساتھ کام کرنے کے لیے ضروری ہیں، جہاں حوالہ شناخت اور نظام کی کلاسوں سے وراثت درکار ہے۔

ARC میموری نظم و نسق

ARC (Automatic Reference Counting) حوالہ کی اقسام کے لیے Swift کا میموری نظم و نسق کا نظام ہے۔ کمپائلر رن ٹائم میں retain/release کالز داخل کرتا ہے، کسی آبجیکٹ پر مضبوط حوالوں کی تعداد کو ٹریک کرتا ہے۔ جب کاؤنٹر صفر تک پہنچتا ہے، آبجیکٹ فوری طور پر آزاد ہو جاتا ہے۔

ARC کا بنیادی مسئلہ چکری حوالے (retain cycles) ہیں۔ جب دو آبجیکٹ ایک دوسرے پر مضبوط حوالے رکھتے ہیں، میموری کبھی آزاد نہیں ہوتی۔ حل کمزور حوالے (weak، آزاد ہونے پر خود بخود nil ہو جاتے ہیں) اور unowned حوالے (اس بات کی ضمانت کہ آبجیکٹ زندہ ہے) ہیں۔

swift
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 میں کون سی ڈیٹا کی اقسام ہیں؟

Swift Int، Double، Float، String، Bool، Array، Set، Dictionary اور ٹوپلز کو سپورٹ کرتی ہے۔ عددی اقسام کا مقررہ سائز ہوتا ہے: Int8، Int16، Int32، Int64 اور غیر نشان زدہ UInt۔ تاریخوں کے لیے Foundation سے Date استعمال ہوتا ہے، ڈیٹا کے لیے — Data۔

Swift میں Optional کیا ہے اور کیوں ضروری ہے؟

Optional دو کیسز والا ایک enum ہے: .none (nil) اور .some(Wrapped)۔ Swift کو if let، guard let یا ?? کے ذریعے واضح Optional جانچ درکار ہے، جو NullPointerException کو ختم کرتا ہے۔ اختیاری زنجیریں (?.) نیسٹڈ اختیاری اقدار کی خصوصیات تک محفوظ رسائی کی اجازت دیتی ہیں۔

Swift میں struct کلاس سے کیسے مختلف ہے؟

Struct — قدر کی قسم، اسائنمنٹ پر نقل ہوتا ہے، وراثت کو سپورٹ نہیں کرتا، ARC درکار نہیں۔ Class — حوالہ کی قسم، حوالہ سے منتقل ہوتا ہے، وراثت اور ڈی انیشیالائزر کو سپورٹ کرتا ہے۔ Apple ڈیفالٹ قسم کے طور پر struct کی سفارش کرتا ہے۔

Swift میں ARC میموری نظم و نسق کیسے کام کرتا ہے؟

ARC خود بخود کلاس آبجیکٹس پر مضبوط حوالوں کو گنتی ہے۔ جب کاؤنٹر صفر ہو جاتا ہے، میموری آزاد ہو جاتی ہے۔ چکری حوالوں کو روکنے کے لیے weak (خودکار nil) اور unowned(ضمانتی عمر) استعمال کریں۔ ARC کا اطلاق struct اور enum پر نہیں ہوتا۔

Swift میں پروٹوکول پر مبنی پروگرامنگ کیا ہے؟

پروٹوکول پر مبنی پروگرامنگ ایک طریقہ ہے جو کلاس کے درجہ بندی کے بجائے توسیعات کے ساتھ پروٹوکول استعمال کرتا ہے۔ پروٹوکول میں پروٹوکول توسیعات کے ذریعے ڈیفالٹ طریقہ کار کے نفاذ ہو سکتے ہیں۔ یہ وراثت کے بغیر کوڈ کے دوبارہ استعمال کی اجازت دیتا ہے، لچک اور جانچ کی اہلیت کو برقرار رکھتا ہے۔

خلاصہ

  • Swift — iOS/macOS ڈویلپمنٹ کے لیے Optionals، ARC اور پروٹوکول پر مبنی پروگرامنگ کے ساتھ Apple کی جامد طور پر ٹائپ شدہ زبان
  • Optionals — Optional Binding، Optional Chaining اور nil-coalescing آپریٹر کے ذریعے nil کے ساتھ ٹائپ محفوظ کام
  • پروٹوکول + توسیعات — ڈیفالٹ طریقہ کار کے نفاذ اور ترکیب کے ساتھ پروٹوکول پر مبنی پروگرامنگ کی بنیاد
  • بندشیں — سیاق و سباق کی گرفت، trailing نحو اور میموری نظم و نسق کے لیے کیپچر فہرستوں کے ساتھ گمنام فنکشن
  • Struct بمقابلہ Class — قدر کی اقسام (نقل، تھریڈ سیفٹی) بمقابلہ حوالہ کی اقسام (وراثت، ARC)
  • ARC — چکری حوالوں کو روکنے کے لیے weak/unowned موڈیفائر کے ساتھ خودکار حوالہ گنتی
  • Switch اور پیٹرن میچنگ — جامع کوریج، ٹوپل میچنگ، رینجز اور where شرائط

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

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

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

مزید پڑھیں