AnyObject和UIbutton作为发件人有什么区别?

当定义一个IBAction时,Anyobject和UIButton都有一个选项,两者的区别是什么?

是的,两个作品。 不同的是,通过声明一个button,你得到了一个types为UIButton的引用,而不是AnyObject(或Objective-C中的id)。 如果你没有这样做,你将不得不在代码中手动执行。

如果动作有一些你想从其他地方调用的代码,而不仅仅是button动作,你应该把它留给AnyObject。

例如刷新button,您可能需要以编程方式进行刷新。 如果你已经设置了你的动作参数为UIButton,你必须发送一个UIButton(但是为什么?你正在以编程方式进行,对吗?)。 而如果是AnyObject的话,你可以发送'self'。 这也可以让你区分刷新是以行动还是以编程方式完成。

希望解释。 对不起,没有代码。 我没有进入Swift编码很多。 欢迎编辑。

编辑

所以,即使它是AnyObject,它也有你的UIButton属性。 只要input它来使用它们。

如果你只使用一个UIButton的函数,最好的做法是将你的发件人声明为一个UIButton 。 这节省了一些代码,它也告诉任何人在将来阅读你的代码,你只希望函数与UIButton一起使用。

使用AnyObject将工作,但你将需要做一个if let button = sender as? UIButton { } if let button = sender as? UIButton { }为了访问它作为一个button。 通过这种方式,您可以根据发件人的实际情况做出不同的反应,但我不build议这样做。

如果它是anyObject,那么它没有任何UIButton的属性。 当你点击这个button并且IBAction被触发时,发送者就会包含触发该事件的信息。

例如,对于一个UIButton,你可能想在IBAction触发时查询UIButton的文本。

然而,在IBAction被连接到两个不同的UI控件的情况下,假设一个button和一个滑块,当它是UIButtontypes(而触发UI元素是UISlider)时,查询发件人会使程序崩溃。 如果你有AnyObject,你可以testing发件人是UIButton还是UISlider,然后做一些事情。

一般来说,如果您不关心发件人,请将其留空,以便读取您的代码的人员知道您没有使用发件人。