0

私は次の機能を持っています

- (void)loginWithCompletionBlock:(void (^)(BOOL))completion

どうやって呼ぶの?BOOLをブロックとして渡すにはどうすればよいですか?私はいくつかの方法を試しましたが、これがどのように機能するのか理解していないようです。

4

2 に答える 2

2

「aBOOLをブロックとして」渡すのではなく、後で渡されるブロックを渡しますBOOL

[thingy loginWithCompletionBlock:^(BOOL didSomethingInteresting){
    // Your code here, using didSomethingInteresting, such as:
    if( didSomethingInteresting ){
        // Do something even more interesting
    }
    else {
        // Do something boring
    }
}];

loginWithCompletionBlock:おそらくオフになり、何らかのサービスにログインしようとします。試行が成功または失敗のいずれかで終了すると、実行可能コードの一部であるブロックが実行され、BOOLによって値が渡されます。loginWithCompletionBlock:

ちなみに、の名前は好きな名前にすることができますが、通常、使用しているAPIには、その意味を示すBOOL名前(など)が付けられます。success

于 2012-05-17T18:38:52.353 に答える
1

これは次のように実装されます。

- (void)loginWithCompletionBlock:(void (^)(BOOL))completion
{
    BOOL result = NO;

    // Do the login thing.

    completion(result);
}

それを呼び出すと、次のようになります。

[object loginWithCompletionBlock:^(BOOL success) {
    if (success) {
        // It worked
    } else {
        // Oh No!!
    }
}];

お役に立てれば。

于 2012-05-17T18:41:38.223 に答える