2013-03-03 110 views
2

請原諒任何錯誤使用的編程術語的,我找了iOS6的解決我的問題:更改類的屬性

我的財產,我的頭文件:

@property (nonatomic, strong) AClass *myExample; 

,但在我。 m文件我實際上可能希望_myExample成爲AClass,BClass或CClass。

_myExample = [[BClass alloc] init]; // incompatible pointer types 

什麼是實施的最佳方式本

+2

「AClass」,「BClass」和「CClass」共享一個共同的超類嗎?他們有共同的界面嗎?你想發送這些對象的消息是什麼? – 2013-03-03 22:51:52

回答

5

你可能會分解出你所需要的是關於三個AClassBClassCCLass真正成爲一個協議,說ICDoSomethingProtocol再申報物業屬於id <NSObject, ICDoSomethingProtocol> myExample而非AClass *

您可以跳過該協議,只需要與id <NSObject>一起去,但您將獲得更少的編譯時檢查。

1

通常您應該創建XClass並使XClass的AClass,BClass和CClass子類。然後使用@property (nonatomic, strong) XClass *myExample;但是,如果你是「懶惰」(這不是一個編程錯誤),你可以使用NSObject的預先退出類,或者簡單地聲明屬性爲@property (nonatomic, strong) id myExample;。 (請注意,沒有*。)

在任何這些情況下,在使用它之前(除了調用超類的方法外),您都需要(或至少應該)將屬性「轉換」 。例如,int aValue = [(BClass*)self.myExample doSomeOperationOnBClass];

爲避免需要像這樣(以及相關的混淆),只需爲三個類聲明單獨的屬性並不罕見,即使三個中的兩個總是未使用。 (再一次,懶惰不是編程的罪孽)

+0

謝謝,這個答案也有幫助。 – 2013-03-04 00:25:11