تمرير رسالة متطابقة إلى فئات OBJC متعددة
-
29-09-2019 - |
سؤال
لدي فصول متعددة ، وكلها أريد إرسال رسالة متطابقة إليها. أن تكون أكثر وضوحا:
أريد إرسال Dox: withClass: مع نفس المعلمات إلى عدد من الفئات. ربما يجعل الكود أكثر وضوحًا:
+ (void)doX:(NSString *)blah {
[Utility doX:blah withClass:[Foo class]];
[Utility doX:blah withClass:[Bar class]];
[Utility doX:blah withClass:[Baz class]];
[Utility doX:blah withClass:[Garply class]];
}
لديّ ثلاث طرق تقوم بشيء مماثل على الفئات التي تنفذ بروتوكول معين (Dox: withClass: الطريقة تنفذ عددًا من الخطوات التي تفترض أن الفئات المعطاة لها تنفذ مثل هذا البروتوكول).
سؤالي هو ، كيف يمكنني أن أحلق من خلال الفصول الدراسية بشكل برمجي أكثر ، لذلك يمكنني ببساطة إضافة إلى قائمة (في الكود - غير مهتم بالقدرة على إضافة وقت التشغيل) لإضافتها إلى الحلقة؟
المحلول
اقتراحي هو تمرير NSArray
من Class
أشياء:
[Utility doX:blah withClasses:[NSArray arrayWithObjects:[Foo class], [Bar class], [Baz class], [Garply class], nil]];
-(void) doX:(Blah) blah withClasses:(NSArray *) classes {
//[classes makeObjectsPerformSelector:@selector(doX:) withObject:blah]
for(Class *someClass in classes) {
[Utility doX:blah withClass:someClass];
}
}
نصائح أخرى
لست متأكدًا من أنك تريد حقًا حلقة هنا.
إذا كنت أنا ربما أحاول الحصول على Foo و Bar و Baz و Garply لتوسيع بعض الفصول الأساسية التي تحدد DOX. ثم يمكن أن يكون لديك صفك الأساسي يلاحظ بلاه واتصل DOX عندما يتغير. لكن ربما لا أفهم ما تحاول القيام به.