2012-05-25 43 views
2

我有一些Obj-C代碼,其中有許多塊作爲成員的類。 這些財產是:Make Objective-C實現塊返回類型

@property(nonatomic, readonly, retain) BOOL(^truthPredicate)(int, NSMutableDictionary*); 

並在.m文件@synthesize語句來實現。在的init方法的類之一,我試圖將該屬性設置爲一個文字塊:

truthPredicate=^(int val, NSMutableDictionary* params) {return val >= MANodeTruthThreshold ? YES : NO;}; 

這標誌着一個編譯錯誤。編譯器,儘管YESNO被定義爲(BOOL)1(BOOL)0,並且BOOL被定義爲signed char的事實,編譯器堅持,我想分配int返回塊到BOOL返回變量。如何讓Obj-C意識到我要返回BOOL s,而不是int s?

+1

LLVM/Clang存在一個已知問題,其中塊上的char_-width返回類型具有某些意外行爲。你並不瘋狂。 :) –

+0

@JonathanGrynspan:謝謝。我經過一段時間後才用C++啓動Obj-C,所以當我可以告訴它時,它讓編譯器試圖錯誤地推導出類型,這令人討厭。 – Linuxios

回答

4

顯然,類型推斷失敗了。嘗試更詳細的語法:

truthPredicate=^ BOOL (int val, NSMutableDictionary* params) {return val >= MANodeTruthThreshold ? YES : NO;}; 
+0

非常感謝SOOO。我一直對此感到非常興奮,並且我不僅僅想要破解一些東西。我知道有一個真正的解決方案。謝謝! – Linuxios