Привести отправителя к типу объекта отправителя? - PullRequest
1 голос
/ 21 января 2010

В приведенном ниже коде нужно ли приводить отправителя к UISlider? Я не могу понять причину, так как отправитель в любом случае является объектом UISlider?

-(IBAction)sliderChangeGoat:(id)sender {
    UISlider *slider = sender; // OR UISlider *slider = (UISlider*)sender;
    NSString *newText = [[NSString alloc] initWithFormat:@"%d", (int)[slider value]];
    [sliderLabel_003 setText:newText];

    if((int)[slider value] > 0) [goatLabel setText:@"Goats:"];
    } else [goatLabel setText:@"None:"];

    [newText release];
}

EDIT_001:

Вот о чем я думал (@chuck), ты имеешь в виду? Я не был уверен, что поменять имя отправителя было дурным тоном?

-(IBAction)sliderChangeGoat:(UISlider*)slider {
}

большое спасибо

1011 * Гэри *

Ответы [ 3 ]

3 голосов
/ 21 января 2010

Это не имеет значения. id эквивалентен любому другому типу указателя объекта. Все, что использует более конкретный тип, это позволяет компилятору проверять его свойства и отправлять объектные сообщения, на которые отвечает объявленный класс.

Если вы хотите статически напечатать его таким образом, вы можете просто указать сам аргумент (UISlider *)slider. Имя аргумента, как и любое другое имя аргумента, - это просто переменная. Я часто заменяю его на «неиспользуемый» в методах делегатов, где меня не волнует отправитель, просто чтобы сделать явным, что он не изменится, если я подключу к нему что-то еще. И, как я сказал, UISlider* - это то же самое, что и id, за исключением того, что оно ограничивает количество сообщений, которые вы можете отправлять без предупреждения.

1 голос
/ 21 января 2010

Приведение этого явно может помочь компилятору подтвердить ваше намерение. Если вы видите предупреждения компилятора, тогда продолжайте и приводите.

0 голосов
/ 21 января 2010

Objective-C - это динамический язык. Во время выполнения он попытается отправить отправителю сообщение о значении. Если ваш отправитель UISlider, он будет работать. Как говорили другие, если вы видите предупреждение, измените объявление метода или приведите отправителя, но оно будет работать, даже если вы этого не сделаете.

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