Declare a block method parameter without using a typedef

前端 未结 5 609
感情败类
感情败类 2020-12-04 05:13

Is it possible to specify a method block parameter in Objective-C without using a typedef? It must be, like function pointers, but I can\'t hit on the winning syntax witho

相关标签:
5条回答
  • 2020-12-04 06:04

    Another example (this issue benefits from multiple):

    @implementation CallbackAsyncClass {
    void (^_loginCallback) (NSDictionary *response);
    }
    // …
    
    
    - (void)loginWithCallback:(void (^) (NSDictionary *response))handler {
        // Do something async / call URL
        _loginCallback = Block_copy(handler);
        // response will come to the following method (how is left to the reader) …
    }
    
    - (void)parseLoginResponse {
        // Receive and parse response, then make callback
    
       _loginCallback(response);
       Block_release(_loginCallback);
       _loginCallback = nil;
    }
    
    
    // this is how we make the call:
    [instanceOfCallbackAsyncClass loginWithCallback:^(NSDictionary *response) {
       // respond to result
    }];
    
    0 讨论(0)
  • 2020-12-04 06:07
    - ( void )myMethodTakingPredicate: ( BOOL ( ^ )( int ) )predicate
    
    0 讨论(0)
  • 2020-12-04 06:12

    This is how it goes, for example...

    [self smartBlocks:@"Pen" youSmart:^(NSString *response) {
            NSLog(@"Response:%@", response);
        }];
    
    
    - (void)smartBlocks:(NSString *)yo youSmart:(void (^) (NSString *response))handler {
        if ([yo compare:@"Pen"] == NSOrderedSame) {
            handler(@"Ink");
        }
        if ([yo compare:@"Pencil"] == NSOrderedSame) {
            handler(@"led");
        }
    }
    
    0 讨论(0)
  • 2020-12-04 06:13

    Even more clear !

    [self sumOfX:5 withY:6 willGiveYou:^(NSInteger sum) {
        NSLog(@"Sum would be %d", sum);
    }];
    
    - (void) sumOfX:(NSInteger)x withY:(NSInteger)y willGiveYou:(void (^) (NSInteger sum)) handler {
        handler((x + y));
    }
    
    0 讨论(0)
  • 2020-12-04 06:15

    http://fuckingblocksyntax.com

    As a method parameter:

    - (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
    
    0 讨论(0)
提交回复
热议问题