amazon-web-services - 使用 AWSTask,如何将 block 声明为变量

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

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

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

例如这段代码:

[task continueWithSuccessBlock:^id(AWSTask *task) {
    //do something
    return nil;
}];

如何将 block 提取为局部变量?这是我到目前为止所得到的:

void (^myBlock)(AWSTask *task) = ^(AWSTask *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 block 返回 nil,因此我删除了该行。这是正确的语法:

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

[task continueWithSuccessBlock:myBlock];

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

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

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

A Short Practical Guide to Blocks

Working with Blocks

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

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

相关文章:

objective-c - 如何使用 ARC 将 block 实例化为实例变量?

objective-c - Obj C 中的 block 比较器如何工作?

database - 带有 ionic 框架的 AWS

ios - 用于签署查询请求的 Amazon Web Services Objective-C SDK

linux - AWS s3 文件通过 Laravel 上传失败

ios - 从远程服务器在 init 方法中填充 tableview 数据源

ios - 在诸如fetchIfNeededInBackgroundWithBlock之类的 block 中使用PFObject的子类时出现问题

iOS - GCD 对 self 的弱引用和强引用

ssh - 如何设置从 Ubuntu 12.04 到 Amazon EC2 的 SSH 连接

database - AWS Neptune DB 与 Dynamo DB 的实体沿袭