あるメソッドをパラメーターとして別のメソッドにどのように渡しますか?クラス全体でこれを行っています。
クラスA:
+ (void)theBigFunction:(?)func{
// run the func here
}
クラスB:
- (void)littleBFunction {
NSLog(@"classB little function");
}
// somewhere else in the class
[ClassA theBigFunction:littleBFunction]
クラスC:
- (void)littleCFunction {
NSLog(@"classC little function");
}
// somewhere else in the class
[ClassA theBigFunction:littleCFunction]
探している型はセレクター(SEL
)であり、メソッドのセレクターは次のようになります。
SEL littleSelector = @selector(littleMethod);
メソッドがパラメータを取る場合は、:
どこに行くか、このように:
SEL littleSelector = @selector(littleMethodWithSomething:andSomethingElse:);
また、メソッドは実際には関数ではなく、特定のクラス(+で始まる場合)またはその特定のインスタンス(-で始まる場合)にメッセージを送信するために使用されます。関数は、メソッドのように「ターゲット」を実際には持たないCタイプです。
セレクターを取得したら、次のようにターゲット(クラスまたはインスタンス)でそのメソッドを呼び出します。
[target performSelector:someSelector];
この良い例は、UIControl
の- addTarget:action:forControlEvents: メソッドを使用して、UIButton
または他のコントロールオブジェクトをプログラムで作成するときに通常使用します。
別のオプションは、ブロックを調べることです。コードのブロック(クロージャー)を渡すことができます。
これがブロックの良い書き方です:
http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1
Apple docs:
Objective Cはこの操作を比較的簡単にします。 Appleは このドキュメント を提供します。
質問に直接取り組むには、関数ではなくセレクタを呼び出します。ここにいくつかのサンプルコードがあります:
大きな機能:
+ (void)theBigFunction:(SEL)func fromObject:(id) object{
[object preformSelector:func]
}
次にクラスBの場合:
- (void)littleBFunction {
NSLog(@"classB little function");
}
// somewhere else in the class
[ClassA theBigFunction:@selector(littleBFunction) fromObject:self]
次にクラスCの場合:
- (void)littleCFunction {
NSLog(@"classC little function");
}
// somewhere else in the class
[ClassA theBigFunction:@selector(littleCFunction) fromObject:self]
編集:送信されたセレクターを修正(セミコロンを削除)