【问题标题】:IOS/Objective-C: Syntax for calling completion blocIOS/Objective-C:调用完成块的语法
【发布时间】:2018-09-24 00:45:33
【问题描述】:

由于某种原因,我似乎无法正确拨打以下电话。

方法签名是:

-(void)getMyBlock: (void (^)(NSString *))completed; // It returns a string.

以下调用它的尝试(以及我尝试过的大约十个其他尝试)不起作用:

[self getMyBlock: (void (^)(NSString*)completed];

【问题讨论】:

    标签: objective-c completionhandler


    【解决方案1】:

    这就是你的块方法应该是这样的:

    -(void)getMyBlock: (void (^)(NSString * yourString))completed {
        completed(@"HELLO");
    }
    

    这就是你的称呼:

    [self getMyBlock:^(NSString *yourString) {
        NSLog(@"%@", yourString);
    }];
    

    此链接可以帮助您: http://goshdarnblocksyntax.com/

    【讨论】:

    • 我当然希望getMyBlock的实现能做的远不止这些,否则就不需要补全块了。
    • 它做得更多——几层方法和服务器调用,但完成的(结果)语法是最后让我感到困惑的问题。
    【解决方案2】:

    您需要为completed 参数提供一个块:

    [self getMyBlock:^(NSString *result) {
        // this code is called when the asynchronous code inside getMyBlock is done
    }];
    

    getMyBlock 方法的实现中的某处代码如下:

    - (void)getMyBlock: (void (^)(NSString *))completed {
        // do some asynchronous stuff
        NSString *result = // some result string
        if (completed) {
            completed(result);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多