أنماط التصميم في Swift مع أمثلة كود لتطبيقات iOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أنماط التصميم في Swift: دليل عملي لمطوري iOS/macOS



أنماط التصميم (design patterns) هي حلول مجربة للمشكلات النمطية في تطوير البرمجيات. لمطوري iOS/macOS، معرفة أنماط Swift هي مهارة إلزامية تتيح إنشاء تطبيقات قابلة للتوسع والاختبار والصيانة. في هذه المقالة، سنشرح 4 أنماط رئيسية مع أمثلة كود حقيقية.



1. Singleton (مفرد)

أحد أكثر الأنماط شيوعًا في تطوير iOS. يضمن وجود مثيل واحد فقط للفئة، ويوفر نقطة وصول عالمية إليه. يُستخدم لإدارة الموارد المشتركة: UserDefaults, NetworkManager, Database.



تنفيذ Singleton في Swift

class NetworkManager {    static let shared = NetworkManager()        private init() { }        func fetchData(from url: URL) {        // منطق الطلب        print("تم الحصول على البيانات من \\(url)")    }}

// الاستخدامNetworkManager.shared.fetchData(from: URL(string: "https://api.example.com")!)


مهم: في Swift 5.5+ استخدم actor لأمان الخيوط:



actor SettingsManager {    static let shared = SettingsManager()    private var settings: [String: String] = [:]        func setValue(_ value: String, forKey key: String) {        settings[key] = value    }        func getValue(forKey key: String) -> String? {        return settings[key]    }}


2. Factory Method (طريقة المصنع)

يحدد واجهة لإنشاء الكائنات، لكنه يسمح للفئات الفرعية بتغيير نوع الكائنات المنشأة. مثالي لإنشاء أنواع مختلفة من مكونات واجهة المستخدم أو نماذج البيانات.



مثال: إنشاء أزرار لمنصات مختلفة

protocol Button {    func render()}

class iOSButton: Button { func render() { print("نعرض زر iOS بزوايا دائرية") }}

class macOSButton: Button { func render() { print("نعرض زر macOS بتدرج لوني") }}

protocol ButtonFactory { func createButton() -> Button}

class iOSButtonFactory: ButtonFactory { func createButton() -> Button { return iOSButton() }}

class macOSButtonFactory: ButtonFactory { func createButton() -> Button { return macOSButton() }}

// الاستخدامlet factory: ButtonFactory = iOSButtonFactory()let button = factory.createButton()button.render() // "نعرض زر iOS بزوايا دائرية"


3. Observer (مراقب)

يسمح للكائنات بالاشتراك في الأحداث وتلقي الإشعارات بالتغييرات. في Swift يتم تنفيذه عبر NotificationCenter أو Combine أو didSet.



تنفيذ عبر Combine (iOS 13+)

import Combine

class WeatherStation { @Published var temperature: Double = 0.0 func updateTemperature(_ temp: Double) { temperature = temp }}

class WeatherDisplay { var subscriptions = Set<AnyCancellable>() let station = WeatherStation() func startObserving() { station.$temperature .sink { [weak self] newTemp in print("تغيرت درجة الحرارة: \\(newTemp)°C") self?.updateUI(with: newTemp) } .store(in: &subscriptions) } private func updateUI(with temp: Double) { // تحديث الواجهة }}


تنفيذ كلاسيكي عبر البروتوكول

protocol Observer: AnyObject {    func update(value: Int)}

class Subject { private var observers = [Observer]() func attach(_ observer: Observer) { observers.append(observer) } func detach(_ observer: Observer) { observers.removeAll { $0 === obs

المدونات

توصيات الكتب