我有一些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;};
這標誌着一個編譯錯誤。編譯器,儘管YES
和NO
被定義爲(BOOL)1
和(BOOL)0
,並且BOOL
被定義爲signed char
的事實,編譯器堅持,我想分配int
返回塊到BOOL
返回變量。如何讓Obj-C意識到我要返回BOOL
s,而不是int
s?
LLVM/Clang存在一個已知問題,其中塊上的char_-width返回類型具有某些意外行爲。你並不瘋狂。 :) –
@JonathanGrynspan:謝謝。我經過一段時間後才用C++啓動Obj-C,所以當我可以告訴它時,它讓編譯器試圖錯誤地推導出類型,這令人討厭。 – Linuxios