أنماط التصميم في Swift: أمثلة كود لمطور iOS

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

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

ابدأ الدورة

أنماط التصميم في Swift: من النظرية إلى التطبيق

أنماط التصميم هي حلول مجربة للمشكلات النمطية في التطوير. لمطور iOS باستخدام Swift، إتقان الأنماط ليس مجرد إضافة في السيرة الذاتية، بل ضرورة. فهي تساعد في كتابة كود نظيف وقابل لإعادة الاستخدام والاختبار. في هذا المقال، سنستعرض 5 أنماط رئيسية مع أمثلة واقعية بلغة Swift.



1. Singleton (مفرد)

أحد أشهر الأنماط في iOS. يضمن وجود نسخة واحدة فقط من الفئة، ويوفر نقطة وصول عالمية إليها.



التنفيذ في Swift

class NetworkManager {    static let shared = NetworkManager()    private init() {} // يمنع إنشاء نسخ أخرى

func requestData(from url: URL) { // منطق الطلب print("طلب إلى \\(url.absoluteString)") }}

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


متى يُستخدم: لإدارة الموارد المشتركة (الشبكة، قاعدة البيانات، UserDefaults). العيب: يعقد اختبار الوحدة، لذا لا يُنصح بالإفراط في استخدامه.



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

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



مثال: إنشاء عناصر واجهة المستخدم

protocol Button {    func render()}

class iOSButton: Button { func render() { print("زر بنمط iOS") }}

class macOSButton: Button { func render() { print("زر بنمط macOS") }}

enum Platform { case iOS, macOS}

class ButtonFactory { static func createButton(for platform: Platform) -> Button { switch platform { case .iOS: return iOSButton() case .macOS: return macOSButton() } }}

// الاستخدامlet button = ButtonFactory.createButton(for: .iOS)button.render() // زر بنمط iOS


3. Observer (مراقب)

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



مثال مع NotificationCenter

extension Notification.Name {    static let userDidLogin = Notification.Name("userDidLogin")}

class AuthManager { func login() { // منطق تسجيل الدخول NotificationCenter.default.post(name: .userDidLogin, object: nil) }}

class ProfileViewController { init() { NotificationCenter.default.addObserver( self, selector: #selector(updateUI), name: .userDidLogin, object: nil ) }

@objc func updateUI() { print("تحديث الملف الشخصي بعد تسجيل الدخول") }

deinit { NotificationCenter.default.removeObserver(self) }}


البديل الحديث: استخدم Combine (iOS 13+) مع @Published و PassthroughSubject للبرمجة التفاعلية.



4. Delegate (مفوض)

أحد الأنماط الأساسية في Cocoa Touch. يسمح لكائن بتفويض تنفيذ المهام إلى كائن آخر. يُستخدم على نطاق واسع في UIKit (مثل UITableViewDelegate).



إنشاء مفوض خاص

protocol DownloadDelegate: AnyObject {    func didFinishDownloading(data: Data)    func didFailWithError(error: Error)}

class Downloader { weak var delegate: DownloadDelegate?

func download(from url: URL) { // محاكاة التحميل let data = Data() delegate?.didFinishDownloading(data: data) }}

class ViewController: UIViewController, DownloadDelegate { let downloader = Downloader()

override fu

المدونات

توصيات الكتب