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

任何指针将不胜感激!

最佳答案

您缺少返回类型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文档的另外两个不错的参考,尽管它们并不全面:

A Short Practical Guide to Blocks

Working with Blocks

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

关于amazon-web-services - 使用AWSTask,如何将块声明为变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39350614/

10-08 20:40