我創建2個對象的子類從NSObject的不同類型的對象作爲一個函數的參數
AObject,BObject
是否有可能這些2個對象的變量傳送到相同的功能?
如
-(void)myFunction:(AObject *)obj;
-(void)myFunction:(BObject *)obj;
我在xcode中測試,它是不允許的。 有沒有更換方法?
歡迎任何評論
感謝 InterDev中
我創建2個對象的子類從NSObject的不同類型的對象作爲一個函數的參數
AObject,BObject
是否有可能這些2個對象的變量傳送到相同的功能?
如
-(void)myFunction:(AObject *)obj;
-(void)myFunction:(BObject *)obj;
我在xcode中測試,它是不允許的。 有沒有更換方法?
歡迎任何評論
感謝 InterDev中
有幾種選擇。這裏有四個浮現在腦海中,每個都有自己的優點和缺點:
判定由簽名:
- (void)myFunctionWithA:(AObject *)obj;
- (void)myFunctionWithB:(BObject *)obj;
聲明NSObject *
類型(或id
的參數,如意見建議)並查詢函數內部的類型。
BaseObject *
來約束它,其中AObject
和BObject
繼承。合併基類與蹦牀技術:
- (void)myFunction:(BaseObject *)base {
[base myTrampoline:self];
}
BaseObject
聲明瞭抽象方法myTrampoline:
,其AObject
和BObject
實現。
不知道更多關於您的問題,不可能說哪個最好。
有人建議只輸入你的參數爲id
,但如果你感覺很棒,你可以強制編譯時檢查你的對象是否真的能夠做你需要的:使用協議。
@protocol DoingSomething <NSObject>
// whatever methods you intend to call on the parameter of that one method
@end
//...
- (void)myFunction:(id<DoingSomething>)param {
// only send messages to param that are in <DoingSomething> and <NSObject>
}
//...
謝謝。我選擇2. – arachide 2010-12-04 02:53:45