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

时间:2015-05-27 06:54:14

标签: ios swift uibutton

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

3 个答案:

答案 0 :(得分:11)

是的,两者都有效。不同之处在于,通过将其声明为按钮,您可以获得一个类型为UIButton的引用而不是AnyObject(或Objective-C中的id)。如果你不这样做,你将不得不在代码中手动完成。

如果操作包含您想从其他任何地方调用的代码,而不仅仅是按钮操作,则应该更喜欢将其留给AnyObject。

例如,刷新按钮,您可能需要以编程方式进行刷新。如果你已经将你的动作参数设置为UIButton,你必须发送一个UIButton(但为什么???你是以编程方式进行的,对吧?)。如果它是AnyObject,您可以发送自我'。这也将使您区分刷新是在动作上还是以编程方式完成。

希望解释。 很抱歉没有代码。我不是很喜欢Swift编码。欢迎编辑。

修改

因此,即使它是AnyObject,它也有你的UIButton属性。只需输入它就可以使用它们。

答案 1 :(得分:10)

如果您只使用UIButton功能,最佳做法是将发件人声明为UIButton。这为您节省了一些代码,并且它还告诉将来读取您的代码的任何人,您只希望该函数与UIButton一起使用。

使用AnyObject会有效,但您需要执行if let button = sender as? UIButton { }才能将其作为按钮访问。这种方式允许您根据发件人的实际情况做出不同的反应,但我不建议这样做。

答案 2 :(得分:-2)

如果它是anyObject,那么它没有任何UIButton的属性。当您单击按钮并且IBAction触发时,发件人包含有关触发操作的事物的信息。

例如,对于UIButton,您可能希望在IBAction触发时查询UIButton的文本。

然而,在IBAction连接到两个不同的UI控件的情况下,比如说,一个按钮和一个滑块,当它是UIButton类型时查询发送者(当触发UI元素是UISlider时)会使程序崩溃。如果你有AnyObject,你将能够测试发件人是UIButton还是UISlider,然后做一些事情。

一般情况下,如果您不关心发件人,请将其留空,以便阅读您的代码的人知道您没有使用发件人。