【问题标题】:Blocks with no return value没有返回值的块
【发布时间】:2015-07-20 03:39:03
【问题描述】:

在 Objective-C 中是否有正确的方法来编写没有返回值的块?我看到的所有例子都是有返回值的。有人还可以解释完成块和常规块之间的区别吗?我知道 ^ 表示它是一个块,但前面的 + (void) 不是表示它也是一个块吗?

【问题讨论】:

标签: ios objective-c objective-c-blocks


【解决方案1】:

如果方法头带有块参数,则如下所示:

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

所以没有返回类型和参数的块看起来像这样:

- (void)someMethodThatTakesABlock:(void (^)(void))blockName;

常规块只是一组(或一组)代码。完成块是在方法完成时将执行的块。完成块是一个常规块,它只是特定于在方法结束时被调用。

^ 表示一个块。方法前的+是类方法。

块的其他使用方式

作为局部变量

returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};

作为属性

@property (nonatomic, copy) returnType (^blockName)(parameterTypes);

作为方法参数

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

作为方法调用的参数

[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];

作为类型定义

typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};

您只需将returnType 替换为void

【讨论】:

    【解决方案2】:

    这是一个演示:
    1、无返回值无参数:

    - (void)viewDidLoad {
    [super viewDidLoad];
    
    //block
    void(^myBlock)(void)  = ^(void) {
        NSLog(@"This is a block without parameter and returned value");
    };
    myBlock();
    

    2、无返回值有参数:

    -(void)blockWithParameterButNoReturnData
    {
        void(^myBlock)(int) = ^(int num) {
            NSLog(@"%d",num*100);
        };
        myBlock(4);
    }
    

    3、有返回值和有参数: -(void)blockWithParameterAndReturnValue

    {
        int (^myBlock)(int) = ^(int num) {
            return num * 100;
        };
       int result =  myBlock(2);
        NSLog(@"This is a block with parameter and return value :%d",result);
    }
    

    PS:欲了解更多信息,请参阅此网站:http://www.cnblogs.com/zhanggui/p/4656440.html

    【讨论】:

    • 需要传参数吗??
    • 我听不懂你在说什么。
    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2017-12-17
    • 2016-12-12
    • 2017-02-28
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多