2013-11-14 2 views
0

У меня есть два подкласса SubClassA и SubClassB, оба из которых являются подклассами класса A, который имеет свойство someProperty. Я хочу решить внутри if-statement, какой из этих подклассов использовать, а затем использовать этот объект.установка подкласса внутри оператора if

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

myObject.someProperty=someValue; 

Это не работает, поскольку я не могу использовать myObject вне инструкции if-else. Как я могу решить эту проблему? Возможно ли сначала создать родительский объект, а затем изменить его на принадлежность к подклассу?

ответ

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

Смежные вопросы