Swift — زبان برنامهنویسی مدرن اپل که در WWDC 2014 به عنوان جایگزین Objective-C معرفی شد. Swift تایپبندی ایمن، مدیریت خودکار حافظه ARC (Automatic Reference Counting) و رویکرد پروتکلمحور را ترکیب میکند. Swift Programming Language — منبع اصلی نحو و کتابخانه استاندارد زبان.
نکات اصلی
Swift — یک زبان برنامهنویسی چندپارادایمی است که توسط اپل برای iOS، macOS، watchOS، tvOS و visionOS توسعه یافته است. اهداف کلیدی زبان: امنیت، سرعت و رسایی نحو. Swift از کامپایلر LLVM استفاده میکند و کد ماشین بهینهسازی شدهای تولید میکند که از نظر عملکرد با C++ قابل مقایسه است.
از زمان انتشار در سال 2014، Swift 6 نسخه اصلی را پشت سر گذاشته است. Swift 6 (2024) مدل کامل data-race safety را از طریق کنترل دقیق ایزولهسازی کد همزمان معرفی کرد. بر اساس GitHub Octoverse 2025، Swift در بین 10 زبان برتر از نظر رشد جامعه قرار دارد و در سرعت پذیرش در پلتفرمهای اپل از Rust و Kotlin پیشی میگیرد.
Swift باز و چندپلتفرمی است — کد منبع در GitHub (Swift Open Source) منتشر شده است. علاوه بر پلتفرمهای اپل، Swift در لینوکس و ویندوز برای توسعه سرور (Vapor, Hummingbird) استفاده میشود، اگرچه حوزه اصلی کاربرد آن توسعه موبایل و دسکتاپ در اکوسیستم اپل است.
دلایل اصلی انتقال: Swift دستههای کاملی از خطاهای ممکن در Objective-C را حذف میکند. Type safety از ناهماهنگی نوع در مرحله کامپایل جلوگیری میکند. Optionals عدم ارجاع nil را حذف میکنند. ARC از روز اول تعبیه شده است، برخلاف MRC/ARC در Objective-C. نحو Swift کوتاهتر و خواناتر است — تحقیقات کاهش 30-40٪ در حجم کد نسبت به Objective-C را برای حل وظایف مشابه نشان میدهد.
نحو پایه 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 و pattern matching در Swift قدرتمندتر از C و Kotlin است. Switch تطبیق با تاپلها، محدودهها، شرطهای where و binding مقادیر را پشتیبانی میکند. کامپایلر پوشش جامع همه caseها را بررسی میکند — نبود default خطا نیست اگر همه مقادیر ممکن پوشش داده شده باشند.
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))"point.x), \(point.y))")
}Optionals — مفهوم مرکزی Swift که مشکل ارجاع null را در سطح سیستم نوع حل میکند. Optional<Wrapped> یک enum با دو case است: .none (nil) و .some(Wrapped). کامپایلر استفاده از Optional را بدون بررسی صریح ممنوع میکند، که یک دسته کامل از خطاهای زمان اجرا را حذف میکند.
var optionalString: String? = "Hello"
optionalString = nil // مجاز
// Optional Binding — استخراج ایمن
if let text = optionalString {
print("متن: \(text)"text)")
} else {
print("مقدار وجود ندارد")
}
// Optional Chaining — دسترسی ایمن به ویژگیها
let length = optionalString?.count ?? 0
// عملگر Nil-coalescing
let greeting = optionalString ?? "Default"Optional Chaining با عملگر ?. امکان فراخوانی ایمن متدها و دسترسی به ویژگیهای مقدار اختیاری را فراهم میکند. اگر زنجیره با nil قطع شود، نتیجه کل عبارت nil است. Nil-coalescing (??) مقدار پیشفرض را ارائه میدهد و در کد UI برای نمایش متن placeholder به طور گسترده استفاده میشود.
Protocols در Swift یک قرارداد — مجموعهای از ویژگیها و متدها را تعریف میکنند. برخلاف رابطهای جاوا، پروتکلهای Swift میتوانند پیادهسازی پیشفرض از طریق protocol extensions داشته باشند. این اساس Protocol-Oriented Programming است، رویکرد توصیه شده اپل به جای وراثت کلاس.
protocol NamedEntity {
var name: String { get }
func description() -> String
}
// پیادهسازی پیشفرض از طریق extension
extension NamedEntity {
func description() -> String {
return "Entity: \(name)"
}
}
// انطباق از طریق extension
extension String: NamedEntity {
var name: String { return self }
}Protocol Extensions امکان اضافه کردن متدها به پروتکل را بدون تغییر هر نوع منطبق فراهم میکنند. این به ویژه برای افزودن ابزارهای مشترک مفید است: map، filter، reduce برای Sequence، یا Codable برای سریالسازی JSON. اپل بسیاری از فریمورکها (SwiftUI, Combine) را بر روی پروتکلها با افزونهها ساخته است.
Closures در Swift — توابع ناشناسی که متغیرها را از زمینه خارجی ضبط میکنند. از نظر نحو، closures شبیه لامبداها در Kotlin هستند، اما با نحو انعطافپذیرتر: trailing closure، shorthand argument names ($0, $1) و autoclosures.
// Closure با ضبط زمینه
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, +)
// Closure به عنوان پارامتر تابع
func performAsync(completion: @escaping (Result<Data, Error>) -> Void) { }@escaping closures زمانی استفاده میشوند که closure پس از بازگشت از تابع اجرا شود — معمولاً برای درخواستهای شبکه و عملیات ناهمزمان. @autoclosure به طور خودکار عبارت را در یک closure میپیچد که در assert و منطق short-circuit استفاده میشود.
انتخاب بین struct و class — یکی از اولین تصمیمها در طراحی مدل Swift است. اپل توصیه میکند به طور پیشفرض از struct (value-type) استفاده کنید و فقط در صورت نیاز به وراثت یا شناسایی با ارجاع به class (reference-type) بروید.
| ویژگی | Struct | Class |
|---|---|---|
| روش انتقال | با مقدار (کپی) | با ارجاع |
| وراثت | پشتیبانی نمیشود | پشتیبانی میشود |
| مدیریت ARC | نیاز نیست | ARC (شمارنده ارجاع) |
| deinit | ندارد | دارد |
| تغییرپذیری | mutating func برای تغییر ویژگیها | هر متدی میتواند تغییر دهد |
| ذخیره در مجموعهها | در زمان درج کپی میشود | ارجاع ذخیره میشود |
Value-ها (struct) در محیط چندنخی ایمنتر هستند — هر نخ یک کپی مستقل دریافت میکند. Reference-ها (class) برای کار با UIKit (UIView, UIViewController) ضروری هستند، جایی که هویت ارجاعی و وراثت از کلاسهای سیستمی مورد نیاز است.
ARC (Automatic Reference Counting) — سیستم مدیریت حافظه Swift برای reference-ها. کامپایلر 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)
}
}
}برای جلوگیری از retain cycles در closures از [weak self] با guard let self = self else { return } استفاده کنید. این قانون به ویژه در UIKit مهم است، جایی که ViewController ارجاعات قوی به ویژگیهای خود دارد و closures درون این ویژگیها به ViewController ارجاع میدهند.
سوالات متداول
Swift از Int، Double، Float، String، Bool، Array، Set، Dictionary و تاپلها (tuples) پشتیبانی میکند. انواع عددی اندازه ثابت دارند: Int8، Int16، Int32، Int64 و بدون علامت UInt. برای کار با تاریخها از Date از Foundation، برای دادهها از Data استفاده میشود.
Optional — enum با دو case: .none (nil) و .some(Wrapped). Swift بررسی صریح Optional را از طریق if let، guard let یا ?? الزامی میکند که NullPointerException را حذف میکند. زنجیرههای اختیاری (?.) امکان دسترسی ایمن به ویژگیهای مقادیر اختیاری تو در تو را فراهم میکنند.
Struct — value-type، در انتساب کپی میشود، از وراثت پشتیبانی نمیکند، به ARC نیاز ندارد. Class — reference-type، با ارجاع منتقل میشود، از وراثت و deinit پشتیبانی میکند. اپل struct را به عنوان نوع پیشفرض توصیه میکند.
ARC به طور خودکار ارجاعات قوی به اشیاء کلاس را شمارش میکند. وقتی شمارنده به صفر میرسد، حافظه آزاد میشود. برای جلوگیری از ارجاعات چرخهای از weak (nil خودکار) و unowned (عمر تضمین شده) استفاده کنید. ARC برای struct و enum اعمال نمیشود.
Protocol-Oriented Programming — رویکردی که از پروتکلها با افزونهها به جای سلسلهمراتب کلاس استفاده میکند. پروتکلها میتوانند پیادهسازی پیشفرض متدها را از طریق protocol extensions داشته باشند. این امکان استفاده مجدد از کد را بدون وراثت فراهم میکند و انعطافپذیری و تستپذیری را حفظ میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.