كيفية الإعلان عن وظيفة في الكاكاو بعد الدالة استخدامه؟
-
20-08-2019 - |
سؤال
وأنا بناء ببطء طلبي إلى حالة العمل.
وأنا باستخدام ظيفتين دعا setCollection
وaddToCollection
. هذه الوظائف سواء استعرض NSArray
كإدخال.
وأنا أيضا لها وظيفة تسمى add
التي يمكنني استخدام كل من هذه الوظائف. عندما أحاول تجميع، كسكودي يظهر خطأ:
'setCollection "غير معلن (أول استخدام في هذه المهمة)
اقتباس فقرة> وأعتقد أن هذا له علاقة مع وظيفة تسمى يجري هو موضح أدناه وظيفة النشطة. سوف تخمين آخر يكون أن مهام يجب أن العولمة لتكون صالحة للاستعمال داخل بلدي وظيفة add
.
وأنا عادة المبرمج بي. الطريق بى يعالج هذه هي أول واحد. ينبغي أن تسمى وظائف معروضة على وظائف استخدامها، لأن خلاف ذلك أنهم لا وجود لها. هل هناك طريقة لجعل وظائف لم يأت متاحة في وقت التشغيل، أو ينبغي أن إعادة ترتيب جميع وظائف لجعلها تعمل بشكل صحيح؟
المحلول
إذا مهامكم عالمية (ليست جزءا من فئة)، لديك فقط لوضع الإعلان قبل الاستخدام، تماما مثل يقترح eJames.
إذا مهامكم هي في الواقع أساليب (جزء من الطبقة)، لديك ليعلن فئة مجهولة من صفك قبل التنفيذ ووضع الإعلانات طريقتك في هذه الواجهة:
@interface Myclass()
- (void) setCollection:(NSArray*)array;
- (void) addToCollection:(NSArray*)array;
@end
@implementation Myclass
// Code that calls setCollection or addToCollection
- (void) setCollection:(NSArray*)array
{
// your code here
}
- (void) addToCollection:(NSArray*)array
{
// your code here
}
@end
وبهذه الطريقة، لا تحتاج لفضح مهامكم في الواجهة الرئيسية للMyClass
.
نصائح أخرى
ويمكنك إعلان وظائف في وقت مبكر كما يلي:
void setCollection(NSArray * array);
void addToCollection(NSArray * array);
//...
// code that calls setCollection or addToCollection
//...
void setCollection(NSArray * array)
{
// your code here
}
void addToCollection(NSArray * array)
{
// your code here
}
إذا كنت تقوم بإنشاء فئة مخصصة، وهذه هي وظائف الأعضاء (وتسمى عادة الأساليب في الهدف-C) فإنك سوف يعلن الطرق في رأس الصف وتحدد لهم في الملف المصدر صفك:
//MyClass.h:
@interface MyClass : NSObject
{
}
- (void)setCollection:(NSArray *)array;
- (void)addToCollection:(NSArray *)array;
@end
و
//MyClass.m:
#import "MyClass.h"
@implementation MyClass
- (void)setCollection:(NSArray *)array
{
// your code here
}
- (void)addToCollection:(NSArray *)array
{
// your code here
}
@end
و
//some other source file
#import "MyClass.h"
//...
MyClass * collection = [[MyClass alloc] init];
[collection setCollection:someArray];
[collection addToCollection:someArray];
//...