Avatar ·

كيفية إنشاء مرجع ضعيف (weak) لبروتوكول في Swift الخالص (بدون @objc)

مرحباً بالجميع! أنا أتعلم Swift وأحاول تنفيذ نمط المفوض (delegate)، لكنني واجهت مشكلة تسرب الذاكرة. لدي بروتوكول: ```swift protocol MyDelegate: class { func didSomething() } class MyClass { var delegate: MyDelegate? func doSomething() { delegate?.didSomething() } } ``` أعلم أنه في Objective-C كان يمكن استخدام `weak` للبروتوكولات المُعلّمة بـ `@objc`. لكنني أريد الكتابة بلغة Swift الخالصة. عندما أحاول عمل: ```swift weak var delegate: MyDelegate? ``` يُصدر المترجم خطأ: `'weak' may only be applied to class and class-bound protocol types`. قرأت أنه يجب توريث البروتوكول من `AnyObject` أو استخدام `class` في تعريف البروتوكول. لكنني لا أفهم تماماً كيف يعمل هذا وما الفرق. سؤالي الرئيسي: كيف أُعلن البروتوكول بشكل صحيح لأتمكن من استخدام `weak` لخاصية المفوض، وفي نفس الوقت تجنب دورة الاحتفاظ (retain cycle)؟ أريد أن يكون المفوض من أي نوع (كلاس...)