Должен ли я читать каждую строку? - PullRequest
1 голос
/ 26 мая 2011

Я учил себя программированию с нуля, создавая простое приложение в Objective C. Сегодня я столкнулся с проблемой, заключающейся в том, что мне пришлось написать метод, который не знал, какой тип объекта он получит.,С помощью Google я был рад обнаружить что-то под названием «кастинг».:)

Я использую приведение типа так:

- (void)aCustomViewControllerNeedsToChangeStuff:(id)viewController
{
    ((SpecialViewController *)viewController).aProperty = somethingInteresting;
    ((SpecialViewController *)viewController).anotherProperty = somethingElse;
    ((SpecialViewController *)viewController).yetAnotherProperty = moreStuff;
}

Нужно ли приводить каждую строку таким образом, или есть способ, которым я могу разыграть "viewController" один раз в областиметода, чтобы сделать мой код аккуратнее?

Ответы [ 3 ]

7 голосов
/ 26 мая 2011

Вы можете привести свой контроллер к переменной temp и использовать его (также добавлена ​​проверка типа - на всякий случай):

- (void)aCustomViewControllerNeedsToChangeStuff:(id)viewController
{
    if ([viewController isKindOfClass:[SpecialViewController class]]){
        SpecialViewController *special = (SpecialViewController *)viewController;
        special.aProperty = somethingInteresting;
        special.anotherProperty = somethingElse;
        special.yetAnotherProperty = moreStuff;
    }
}
2 голосов
/ 26 мая 2011

Используйте одну переменную, например

  SpecialViewController *tempController = (SpecialViewController *)viewController;

, чем используйте эту переменную для доступа к значению, например

tempController.aProperty 
2 голосов
/ 26 мая 2011

Как насчет:

- (void)aCustomViewControllerNeedsToChangeStuff:(id)viewController
{
    SpecialViewController * controller = (SpecialViewController *)viewController;
    controller.aProperty = somethingInteresting;
    controller.anotherProperty = somethingElse;
    controller.yetAnotherProperty = moreStuff;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...