سؤال

لدي فصول متعددة ، وكلها أريد إرسال رسالة متطابقة إليها. أن تكون أكثر وضوحا:

أريد إرسال 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 عندما يتغير. لكن ربما لا أفهم ما تحاول القيام به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top