2012-09-21 13 views
5

Obj-Cブロックは、私が最近初めて使用しているものです。ヘッダファイルでObjective-Cブロックの構文

:私は、次のブロックの構文を理解しようとしている

@property (nonatomic, copy) void (^completionBlock)(id obj, NSError *err); 

メインファイルで:

-(void)something{ 

id rootObject = nil; 

// do something so rootObject is hopefully not nil 

    if([self completionBlock]) 
     [self completionBlock](rootObject, nil); // What is this syntax referred to as? 
} 

私は支援に感謝します!

+0

IMOでは、ドットシンタックスを使用するとどうなるでしょうか。 'if(self.completionBLock)self.completionBlock(rootObject、nil);' – zpasternack

答えて

2

そのブロックプロパティを、実行時にブロックを設定することができます:AC機能は、私はあなたがよりよく理解できるように二つに文を分割している下...

です。ここで

次のコードでコード

self.completionBlock = ^(id aID, NSError *err){ 
    //do something here using id aID and NSError err 
}; 

を、以下の方法を設定することができ、クラス内のように、あなたはメソッド/ブロックセットを呼び出すことができ、それはvoid型であるため

を設定するための構文であります以前は

if([self completionBlock])//only a check to see if you have set it or not 
{ 
     [self completionBlock](aID, nil);//calling 
} 
+0

ありがとうございます! – JaredH

5

ブロックはオブジェクトです。ブロックがnilでない場合は、チェックされた後、あなたは、2つの必須の引数を渡し、それを呼び出しているメソッド内で、あなたのケースで

...

ブロックは同じように呼ばれていることに注意してください

[self completionBlock] //The property getter is called to retrieve the block object 
    (rootObject, nil); //The two required arguments are passed to the block object calling it 
+0

説明をありがとう! – JaredH

関連する問題