将发件人作为id或特定类转发给IBAction

joh*_*ers 5 objective-c uibutton ios

我在IBAction语句中看到了两种处理发送方对象的方法.第一个看起来像这样:

-(IBAction)buttonPressed:(id)sender{
 UIButton*someButton=(UIButton*)sender;
 //do something with someButton.tag or whatever
 }
Run Code Online (Sandbox Code Playgroud)

另一个似乎更容易

 -(IBAction)buttonPressed:(UIButton*)sender{
  //do something with sender.tag or whatever
  }
Run Code Online (Sandbox Code Playgroud)

我通常会选择版本2.如果你知道只有一个按钮会发送到这个方法,任何特别的理由更喜欢一种风格而不是另一种风格?

我可以看到版本1哪里好,如果任何东西可以是发件人,如按钮,或开关或滑块等.但如果你正在寻找UIButton类似的属性tag,如果你的发件人不是一个没有太大的区别UIButton.因此版本2看起来更直接.

我想我是否会错过一个明显的理由来选择第一版.

Mr.*_*rna 5

我认为使用第二个版本没有问题。我通常使用第二个版本,如果发件人可能是一个以上类型的对象,则仅使用第一个版本。然后,如果该方法需要知道什么类型的对象,则该方法可以在将发送方转换为特定类型之前查询发送方。

更常见的是,我发现不需要访问发件人,因此我只使用:

- (IBAction)buttonPressed {
  // Do something.
} 
Run Code Online (Sandbox Code Playgroud)