2016-05-03 20 views
0

我有一個類Request,應該有一個回調塊屬性,可以叫它RequestCallback屬性指的是兩個塊的通用接口

請求本身不應該被使用,但它有兩個子類。 APIRequestHttpRequest。 (是的,在這種情況下是有區別的)。

對於APIRequestHttpRequest,回撥塊不同,我們稱它們爲APIRequestCallbackHttpRequestCallback

塊定義:

typedef void (^HttpRequestCallback)(HttpResponse *); 
typedef void (^APIRequestCallback)(APIResponse *); 

我還沒有找到任何辦法讓我的請求類有一個回調屬性,它可以是APIRequestCallbackHttpRequestCallback類型。

我可以想辦法做到這一點,但我沒有看到任何暗示它。實施例將是存儲我的回調對象作爲id,又讓APIRequestCallbackHttpRequestCallback延伸限定RequestCallback

// Can be either HttpRequestCallback or APIRequestCallback 
@property (copy) RequestCallback callback; 
// or 
@property (strong) id callback; 
// or 
@property (strong) id <RequestCallback> callback; 

是否一些熟練目標C顯影劑有一個解決這個?

回答

0

我發現了一個工作解決方案,現在讓我滿意。如果有人知道更好,請教育我。

Request類使用下面的typedef座:

typedef void (^RequestCallback)(id); 

而且使用這樣的特性:

@property (copy) RequestCallback callback; 

這工作,因爲ID類型不APIResponse對象和HttpResponse區分對象。我很樂意使用Objective C的新泛型語法強制該類型爲__covariant Response,但我無法使其工作。