在下面的代码中,我是否需要将发件人转发给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 {
}
非常感谢
加里
答案 0 :(得分:3)
没有区别。 id
等同于任何其他对象指针类型。所有使用更具体的类型都允许编译器检查它的属性是什么,并且您正在发送它声明的类响应的对象消息。
如果你想以这种方式静态输入,你可以自己创建参数(UISlider *)slider
。参数名称就像任何其他参数名称一样 - 它只是一个变量。我经常在委托方法中将其更改为“未使用”,我不关心发送方只是为了明确表示如果我将其他内容挂钩,它就不会改变。正如我所说,UISlider*
与id
相同,但它会限制您可以发送的消息而不会收到警告。
答案 1 :(得分:1)
显式强制转换可能有助于编译器确认您的意图。如果你看到编译器警告,那么继续演员。
答案 2 :(得分:0)
Objective-C是一种动态语言。在运行时,它将尝试向发送方发送值消息。如果您的发件人是UISlider,它将起作用。就像其他人说的那样,如果你看到警告继续进行并改变方法声明或投射发送者,但即使你不这样做也会有效。