ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة
ولّدوا init أو CodingKeys أو توافقات Equatable تلقائيًا باستخدام ماكروهات الأعضاء.
ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
نظرة عامة على ماكرو العضو
يولّد ماكرو العضو المرفق أعضاء جددًا، مثل الخصائص والأساليب وinit، مباشرةً في النوع الذي طُبّق عليه.
@AddID
struct User { var name: String }
// After expansion:
// struct User { var name: String; var id = UUID() }المطابقة مع MemberMacro
نفّذوا MemberMacro وأعيدوا مصفوفة من DeclSyntax تمثّل الأعضاء الجدد.
import SwiftSyntaxMacros
struct AddIDMacro: MemberMacro {
static func expansion(
of node: AttributeSyntax,
providingMembersOf decl: some DeclGroupSyntax,
in context: some MacroExpansionContext
) throws -> [DeclSyntax] {
return ["var id = UUID()"]
}
}إنشاء init
يمكن لماكروات الأعضاء إنشاء مُهيئ مخصّص، ليحل محل init المُنشأ تلقائيًا من الأعضاء عند الحاجة.
// Macro expansion returns:
[
"init(name: String) { self.name = name; self.id = UUID() }"
]الآليات الداخلية لماكرو @Observable
يستخدم @Observable المضمّن في Swift ماكروات الأعضاء لإضافة البنية التحتية اللازمة للمراقبة إلى الفئة.
@Observable
class Counter {
var count = 0
// macro adds: _$observationRegistrar, access(), withMutation()
}قراءة النوع الذي طُبّق عليه الماكرو
يمكنكم الوصول إلى خصائص النوع الذي طُبّق عليه الماكرو عبر المعامل decl لتوليد أعضاء واعين بالسياق.
if let structDecl = decl.as(StructDeclSyntax.self) {
let members = structDecl.memberBlock.members
// iterate to inspect stored properties
}استخراج الخصائص المخزنة
رشّحوا قائمة الأعضاء للعثور على تعريفات المتغيرات ذات أنماط الخصائص المخزنة، واستخدموها لتوجيه توليد الشيفرة.
let storedProps = members.compactMap { member -> VariableDeclSyntax? in
guard let varDecl = member.decl.as(VariableDeclSyntax.self),
varDecl.bindingSpecifier.tokenKind == .keyword(.var)
else { return nil }
return varDecl
}توليد Equatable من الأعضاء
يمكن لماكرو @AutoEquatable توليد == من خلال مقارنة كل خاصية مخزنة.
// Generated code:
static func == (lhs: User, rhs: User) -> Bool {
lhs.name == rhs.name && lhs.id == rhs.id
}الجمع بين ماكرو العضو وماكرو التوافق
غالبًا ما تجمعون بين MemberMacro وConformanceMacro لإضافة أعضاء إلى النوع والإعلان عن توافقه مع البروتوكول.
struct AutoEquatableMacro: MemberMacro, ConformanceMacro { ... }وسيطات السمة
يمكن لماكروكم قبول وسيطات لتخصيص الشيفرة التي يولّدها.
@Clamped(range: 0...100)
var score: Int = 50
// macro reads range from attribute node and generates clamping accessorsالإبلاغ عن أخطاء الماكرو
ارموا MacroExpansionError أو أصدروا تشخيصات عند استخدام الماكرو بطريقة غير صحيحة.
guard decl.is(StructDeclSyntax.self) else {
throw MacroError.message("@AddID can only be applied to structs")
}أداء البناء
بما أن التوسعة تحدث وقت الترجمة، لا تضيف ماكروات الأعضاء أي كلفة وقت تشغيل، كما يمكن تخزين الشيفرة المولّدة مؤقتًا.
// All generated members are emitted as source code
// and compiled normally — no reflection at runtimeاختبار سريع
مع أي بروتوكول يجب أن يتطابق ماكرو العضو المرفق؟
مراجعة الدرس
تولّد ماكروات الأعضاء (MemberMacro) خصائص مخزنة وخصائص محسوبة ومهيئات للنوع الذي تزيّنه. اقرأوا أعضاء النوع الحالية لإنتاج شيفرة حساسة للسياق. واجمعوا بينها وبين ConformanceMacro لإضافة توافقات البروتوكولات أيضًا.
الأسئلة الشائعة
هل درس «ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة» مجاني؟
نعم — نص درس «ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة»؟
ولّدوا init أو CodingKeys أو توافقات Equatable تلقائيًا باستخدام ماكروهات الأعضاء. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أدوار الماكرو: مستقل مقابل ملحق
- كتابة ماكرو تعبير مستقل
- ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة
- اختبار الماكروهات وتصحيحها