2013-11-14 89 views
0

我有兩個子類SubClassA和SubClassB,它們都是ClassA的子類,它有一個名爲someProperty的屬性。 我想if語句使用這些子類的,後來就可以使用這個對象的內部決定。在if語句中設置子類

if(conditionA){ 
    SubClassA *myObject; 
} 
else{ 
    SubClassB *myObject; 
}  

myObject.someProperty=someValue; 

這不起作用,因爲我不能在if-else語句之外使用myObject。我怎麼解決這個問題?是否有可能首先創建一個父對象,然後將其更改爲屬於一個子類?

回答

5

聲明在父類的類型的封閉範圍的變量。您可以將子類分配給其父類類型的變量,而無需強制轉換。

SuperClass *myObject = nil; 
if (a) { 
    myObject = [[SubClassA alloc] init...]; 
} else { 
    myObject = [[SubClassB alloc] init...]; 
} 
myObject.someProperty=SomeValue; 

假設someProperty是在超類上聲明的。否則,我認爲這個代碼可能需要重新考慮。

+1

而且可以稍後使用'[myObject isKindOfClass [SubClassA class]]'來測試對象類型,如果需要調用'(SubClassA *)'來調用只有SubClassA支持的方法。 –

+0

像一個魅力工作,謝謝! – Nilsymbol