2012-01-19 171 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