Использование свойства подкласса объекта - PullRequest
0 голосов
/ 19 сентября 2011

Мой код работает нормально, но я получаю предупреждения, поэтому я думаю, что могу сделать это лучше. У меня есть подкласс NSObject (Objects), и у меня есть подкласс Objects (subObject). У меня есть свойство, объявленное в subObjects. Я храню множество объектов, которые являются различными подклассами объектов, в одном NSMutableArray. Иногда я прохожу массив и делаю определенные вещи с определенными объектами. Я читаю из моего массива так:

//I have declared an Objects "myObject" earlier in my code.
//c is an int used to select an object from the array
myObject = [arrayObjects objectAtIndex:c];

В этом случае я обращаюсь к своему свойству, объявленному в subObject как

[myObject property]

Код работает, потому что я его настроил, поэтому он не сможет получить доступ к этому куску кода, не будучи субобъектом. Тем не менее, я получаю предупреждение, потому что компьютер не знает этого. Он только знает, что myObject - это Objects, а не subObject. Как мне это исправить и избавиться от предупреждения?

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Если вы уверены, что все объекты в NSMutableArray имеют тип SubObject (имена типов должны начинаться с символа верхнего регистра), то у вас есть следующие возможности:

  • вы можете объявить извлекаемый элемент как субобъект напрямую:

    SubObject *myObject = [arrayObjects objectAtIndex: c];
    [myObject setProperty: 17];
    
  • или вы разыгрываете:

    Object *myObject = [arrayObjects objectAtIndex: c];
    [(SubObject*)myObject setProperty: 17];
    
  • или вы просто используете id . Если вы используете id , компилятор ничего не предполагает и не выдаст предупреждение:

    id myObject = [arrayObjects objectAtIndex: c];
    [myObject setProperty: 17];
    
1 голос
/ 19 сентября 2011

Вы должны убедиться, что объект, который вы получаете из массива, объявлен с типом subObject ДО того, как вы «убедитесь», что все правильно. Тогда компилятор больше не выдаст предупреждение ...

например. что-то вроде:

Object objO;

objO = [myarray objectAtIndex: n];

if (myMakingSure) {
    SubObject objS;
    objS = (SubObject) objO;
    x= [objS getProperty];
}

ps также убедитесь, что вы принимаете ответы, если они правильные - в противном случае можно не решиться ответить на ваши вопросы ... (Я не знал в самом начале и также получил хорошую записку об этом)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...