具有返回类型的块上的编译错误

时间:2012-01-19 10:17:41

标签: iphone objective-c block

我有以下区块代码

    typedef BOOL(^FieldValidationBlock)(NSString *);
FieldValidationBlock aBlock = ^(NSString *input){
    return ([input length] == 10) ;
};

这会抛出一个编译错误,表示返回类型是int,应该是BOOL。 当我添加一个演员阵容时,它的效果很好:

    typedef BOOL(^FieldValidationBlock)(NSString *);
FieldValidationBlock aBlock = ^(NSString *input){
    return (BOOL)([input length] == 10) ;
};

为什么会这样?

1 个答案:

答案 0 :(得分:1)

因为BOOL是目标C类型,逻辑比较运算符是标准C.在标准C中,比较运算符的返回类型是int。有时候知道这很重要,因为当你否定一个你认为是布尔值但实际上是一个int的值时,它不一定是你所期望的。

在您的示例中,转换为BOOL很好。