我收到编译错误
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;
}];
}
我已经阅读了其他类似的答案,但没有一个能直接解决我的问题。是否在块完成之前返回了值?
答案 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;
希望它有所帮助!!