我正在使用AWS并需要AWSTask的帮助。基本上我有一些非常大的块,我想将其声明为变量以便于阅读。
http://docs.aws.amazon.com/mobile/sdkforios/developerguide/awstask.html
例如这段代码:
plotBands
如何将块提取为局部变量?这是我到目前为止所得到的:
[task continueWithSuccessBlock:^id(AWSTask *task) {
//do something
return nil;
}];
哪个出错:
void (^myBlock)(AWSTask *task) = ^(AWSTask *task){
//do something
return nil;
};
[task continueWithSuccessBlock:myBlock];
以下是方法声明:
Incompatible block pointer types initializing 'void (^__strong)(AWSTask *__strong)' with an expression of type 'void *(^)(AWSTask *__strong)'
这是涉及的typedef:
- (AWSTask *)continueWithSuccessBlock:(AWSContinuationBlock)block;
任何指针都将不胜感激!
答案 0 :(得分:0)
您错过了返回类型void
。此外,您从void块返回nil
,因此我删除了该行。这是正确的语法:
void (^myBlock)(AWSTask *task) = ^void(AWSTask *task){
//Do something with the AWSTask
};
[task continueWithSuccessBlock:myBlock];
就返回类型而言,块本质上与方法类似,因为它们必须返回声明的类型。
这是一个有用的参考:http://goshdarnblocksyntax.com/, 这只是这里更明确命名的域的镜像:http://fuckingblocksyntax.com/
以下是来自Apple的Docs的两个更好的参考文献,尽管它们并不全面:
祝你好运,我希望有所帮助!