2014-10-13 3 views
0

Это немного сложно объяснить. У меня есть массив ссылок на классы. Я хотел бы создать экземпляр члена одного из классов, но я не хочу использовать условное выражение.Мгновение от ссылки на класс

Вот мой код, который работает (ниже то, что я хотел бы сделать):

self.myClasses = [NSMutableArray arrayWithObjects: 
        [MyClassA class], 
        [MyClassB class], 
        [MyClassC class], 
        [MyClassD class],nil]; 

// later 
int indexOfClassThatIWantAMemberOf = 2; 

switch (indexOfClassThatIWantAMemberOf) { 
       case 0: 
        myObj = [[MyClassA alloc] init]; 
        break; 
       case 1: 
        myObj = [[MyClassB alloc] init]; 
        break; 
       case 2: 
        myObj = [[MyClassC alloc] init]; 
        break; 
       case 3: 
        myObj = [[MyClassD alloc] init]; 
        break; 

       default: 
        break; 
      } 

выше работает нормально, но я предпочел бы одну строку кода, что-то вроде этого:

NSObjet *myOb = [[[self.myClasses objectAtIndex:i] alloc] init]; 

Кто-нибудь знает, если это возможно? Спасибо за помощь.

+1

Пробовали ли вы, что вы предложили? Что случилось? –

+0

вы пробовали, может быть ...? – holex

+0

ANSWER Jeffamaphone и holex верны. После попытки снова работает мой код. В первый раз я должен был просто набрать некоторый код BS и получить ошибку компилятора. Спасибо за помощь и мои извинения за думпанскую. – znerolnoht

ответ

1

Вы пытались сделать то, что предложили? Это, безусловно, возможно.

NSArray *array = @[[Class1 class], [Class2 class]]; 
id object = [[array[0] alloc] init]; 
0

Попробуй так:

self.myClasses = [NSMutableArray arrayWithObjects: 
        [MyClassA class], 
        [MyClassB class], 
        [MyClassC class], 
        [MyClassD class],nil]; 

// later 
NSUInteger indexOfClassThatIWantAMemberOf = 2; 
Class class = self.myClasses[indexOfClassThatIWantAMemberOf]; 
id myObj = [[class alloc] init]; 
Смежные вопросы