使用AWSTask,如何将块声明为变量

时间:2016-09-06 13:45:47

标签: amazon-web-services objective-c-blocks

我正在使用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;

任何指针都将不胜感激!

1 个答案:

答案 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的两个更好的参考文献,尽管它们并不全面:

A Short Practical Guide to Blocks

Working with Blocks

祝你好运,我希望有所帮助!