2016-08-28 8 views
1

私はブロックを勉強していましたが、使用するのはかなり印象的です。しかし、私は関数のブロックを変数として使うことができることを知りました。その主な用途は、何らかのアクションを実行しなければならない何らかの結果を得た後に非同期の仕事をしたいときです。目的のcOSの完了ハンドラ

私は多くのリソースを見て、彼らが何をしているかを得ました。

-(void) blockAsLastParam:(NSString *)name completion:(sudBlock)blockName{ 
    blockName(name); 
} 


[self blockAsLastParam:@"sudh" completion:^(NSString *myname) { 
     NSLog(@"This is block %@",myname); 
    }]; 

ので.Mファイルにパラメータとしてブロックを実装する.hファイル

typedef void(^sudBlock)(NSString * myname); 

- (void)blockAsLastParam:(NSString*)name completion:(sudBlock)blockName; 

にパラメータとしてブロックを定義する:私はちょうどこのように文字列を渡すことによって、同じことをやってみましたここで私は文字列として "sudh"を渡して、もう一度それを取得しています。

まだ私はどのように作品が動作するか分かりません。 物事の仕方を図面で完全に把握できるチュートリアルはありますか?

私は多くの記事を読んだことがありますが、実装する必要がある方法だけを示していますが、なぜこの実装がこのようなことをするのかはわかりません。 呼び出された関数でもパラメータ転送がどのように行われていますか。

+0

達成したいのは何ですか?これを[Apple doc](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html)からお読みください –

+0

私はその使用方法を調べるだけで何も達成したくありません。もし私がAPIをどのように呼び出し、その結果を関数に渡すかの例を得ることができれば。それは良いだろう –

+0

このリンクはあなたがブロックが何であるかを理解するのを助けることができます。 http://rypress.com/tutorials/objective-c/blocks – Leena

答えて

0

このようなことができます。

下記のようにあなたは、ブロック内のあなたの文字列を処理し、myResultFunctionを使用して戻って結果を送信する、myResultFunctionにあなたが欲しい、これまで何を行うことができますが、あなたは更新UI使用する場合はdispatch_get_main_queueすることができますこの例では、

[self blockAsLastParam:@"sudh" completion:^(NSString *myname) { 

    NSString *processedString = @""; 

    //Do your processing here your own logic 
    [self myResultFunction:processedString]; 

}]; 

-(void)myResultFunction:(NSString*)porcessedString{ 
      //do anything with your String 

     //UpDate UI 
     dispatch_async(dispatch_get_main_queue(), ^{ 
     //write logic here for updating UI like updating textfield or label 
    });   

} 
関連する問題