2012-01-19 125 views
2

我有以下的块代码编译错误与返回类型

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

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

在你的例子中,转换为BOOL很好。

+0

嗯,即使当我尝试做“[input length] == 10?YES:NO”。这应该消除你所声称的问题,但它仍然无法工作。 – ugiflezet

+1

我怀疑这可能与BOOL不是真正的一流类型有关,它们是用typedef标记字符,检查objc.h.解决错误的另一种方法是显式键入要分配的块,并避免使用类型推理器。 'FieldValidationBlock aBlock = BOOL ^(NSString * input){...}' – ikuramedia

+0

对不起,这意味着'FieldValidationBlock aBlock =^BOOL(NSString * input){...}' – ikuramedia