1

しばらく頭を悩ませていましたが、探していたものが見つからなかったようです。基本的に、クラスAには次のメソッド宣言があります。

- (void)doSomethingCoolWithThisBlock:(void (^)(void))block 

クラスBで、このメソッドをブロック部分で次のように呼び出すと、次のようになります。

UILabel *myLabel = [[UILabel alloc] init];
UITextField *myField = [[UITextField alloc] init];

私の質問は、私の実装でdoSomethingCoolWithThisBlock、ブロック内にあるものを分析して、たとえばUILabelを言うにはどうすればよいですか?

4

1 に答える 1

3

簡単な答えは、あなたはできないということです。メソッドにを渡したい場合はUILabel、タイプの引数UILabel *(および個別の引数として渡したいその他のもの、またはある種のコンテナタイプの1つの引数(場合によっては独自のカスタムプロトコル)を取り、すべてを含む必要があります。もの)。

ただし、ブロック内から1つだけを渡したい場合は、もちろん、ブロックに何かを返すようにすることができます(たとえば、タイプをに変更してから(UILabel *)(^)(void)、ブロックの最後でdoを実行しますreturn myLabel;)。より複雑な方法は、ブロックにポインタ(たとえばUILabel **)へのポインタを引数として取り、ブロック内からそれらに割り当てることですが、これはあまり意味がないように見えます。

于 2012-11-26T02:28:06.020 に答える