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

Using AWSTask, How to declare a block as a variable

我正在使用 AWS,需要有关 AWSTask 的帮助。基本上我有一些非常大的块,我想将它们声明为变量以提高可读性。

http://docs.aws.amazon.com/mobile/sdkforios/developerguide/awstask.html

例如这段代码:

[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)'

方法声明如下:

- (AWSTask *)continueWithSuccessBlock:(AWSContinuationBlock)block;

这里是涉及到的typedef:

typedef __nullable id(^AWSContinuationBlock)(AWSTask<ResultType> *task);

如有指点,将不胜感激!

您缺少 return 类型 void。此外,您从空块 returning nil,所以我删除了该行。这是正确的语法:

void (^myBlock)(AWSTask *task) = ^void(AWSTask *task){
    //Do something with the AWSTask
};

[task continueWithSuccessBlock:myBlock];

就 return 类型而言,块本质上类似于方法,因为它们必须 return 声明的类型。

这是一个有用的参考:http://goshdarnblocksyntax.com/, 这只是这里更明确命名的域的镜像:http://fuckingblocksyntax.com/

这里有两个来自 Apple 文档的比较不错的参考资料,尽管它们并不全面:

A Short Practical Guide to Blocks

Working with Blocks

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