如何在iOS中的此块中返回正确的值

时间:2015-05-18 08:52:48

标签: ios objective-c-blocks

我收到编译错误

incompatible block pointer types sending 'BOOL'

我要做的就是在以下代码中返回完成块中的值:

-(BOOL)registerUserWithUser:(NSString*)name withPhone: (NSString*)number withPassword: (NSString*)password{
GlobalFunctions *function = [GlobalFunctions sharedInstance];
[function registerUserWithName:name phone:number password:password completion:^(BOOL isSuccess, NSError *error) {
    return isSuccess;
}];    
}

我已经阅读了其他类似的答案,但没有一个能直接解决我的问题。是否在块完成之前返回了值?

3 个答案:

答案 0 :(得分:2)

  

在块完成之前是否已经返回了值?

简而言之:!块异步运行。块的返回不能用作方法的返回值。

但是,这不是造成编译时错误的原因。您的块没有返回类型:

^returnType(parameters)

但无论如何你要回到街区内的东西。有关块语法的更多信息,请查看here

答案 1 :(得分:0)

您的方法是异步的,因此您无法以传统方式获得回报。如果你从块中返回一些东西,它就是块的返回,而不是函数。

我认为最好在回调中传递你的逻辑代码。

typedef void(^Callback)(BOOL success);

-(void)registerUserWithUser:(NSString*)name withPhone: (NSString*)number withPassword: (NSString*)password callBack:(Callback)callBack{
GlobalFunctions *function = [GlobalFunctions sharedInstance];
[function registerUserWithName:name phone:number password:password completion:^(BOOL isSuccess, NSError *error) {
    callBack(isSuccess);
    }];
 }

然后你可以像这样使用它

  [self registerUserWithUser:@"" withPhone:@"" withPassword:@"" callBack:^(BOOL success) {
    if (success) {

    }else{

    }
}];

答案 2 :(得分:0)

我认为您希望将块作为方法参数传递。你可以这样声明你的方法。

code

实施将有点像这样。最后,您可以调用成功处理程序块参数。

Inventory
    .find()
    .populate('product',{where:{code:{'contains':'something'}}})
    .exec(function (err, inventories) {
        //do something
    })

您可以这样调用您的方法:

-(void)registerUserWithUser:(NSString*)name withPhone: (NSString*)number withPassword: (NSString*)password successHandler:(void (^)(BOOL isSuccess))myBlock;

希望它有所帮助!!