Extension در سوییفت

swift extension

اکستنشن‌ها در Swift بسیار مفید و کاربردی هستن. با کمک extension میتونیم به کلاس‌ها، structها، enumها و پروتکل‌ها functionality یا متد جدید اضافه کنیم حتی اگر به اونها دسترسی نداشته باشیم.

Extension Syntax

extension SomeType {
	// new functionality to add to SomeType goes here
}

برای مثال کد زیر رو ببینید:

extension Array where Element == String {
    func alphabeticallySort() -> Array {
        return self.sorted { $0.lowercased() < $1.lowercased() }
    }
}

با استفاده از این extension برای Array یک متد جدید اضافه کردیم  با نام alphabeticallySort که Array رو براساس حروف الفبا مرتب میکنه.

یا تو مثال بعدی به کلاس Int متدی اضافه میکنیم که مربع یک عدد را محاسبه میکنه:

extension Int {
    func squared() -> Int {
        return self * self
    }
}
3.squared() 
// output = 9

یا با استفاده از پراپرتی به اسم isOdd به کلاس Int در صورتی عدد مورد نظر فرد باشه true برگشت داده میشه.

extension Int {
    var isOdd : Bool {
        return self % 2 != 0
    }
}
3.isOdd 
// output = true

توجه کنید که در اکستنشن‌ها فقط از computed property میتونیم استفاده کنیم و از stored propertyها نمیشه استفاده کرد

یکی از قابلیت‌هایی کاربردی extension که من به شخصه خیلی ازش استفاده میکنم قابلیت تفکیک کد‌ها در Controllerهاست.

همه‌ی ما، مخصوصا توی پروژه‌های بزرگ با Massive Controllerها (کنترلر‌هایی که تعداد خط کدهاش زیاد شده) برخورد کردیم. یکی از روش‌هایی که باعث میشه خوانایی Controllerها افزایش پیدا کنه استفاده از extension هست.

مثلا تقکیک متد‌های پروتکل UITableViewDataSource و یا UITableViewDelegate بدین شکل:

class DetaiViewController: UIViewController {
    
}
// TableView DataSource
extension DetaiViewController: UITableViewDataSource {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
    }
}

و یا تفکیک متد‌های مختلف استفاده شده در Controller:

// MARK: - Setup View
extension DetaiViewController {
    private func setupUI() {
        
    }
}
 // MARK: - Calculate Score
extension DetaiViewController {
    private func calculateScore() {
        
    }
    private func convertScoresToGift() {
        
    }
}

همونظور که دیدید extensionها ابزار مفيد و کاربردی هستن که کمک میکنم کد تمیزتر و سازماندهی شده‌تری داشته باشیم.

اگر تجربه‌‌ای در مورد پیاده‌سازی extensionها دارید خوشحال میشم به اشتراک بذارید.

امیدوارم این آموزش مختصر کمک کنه کد‌های تمیزتری بنویسید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *