我正在使用9个按钮构建应用程序。我试图将它连接到下面的一个IBaction,这不起作用(在助理编辑器中没有UI更新,让我连接按钮和这个IBAction代码块)。
@IBAction func buttonPressed(_ sender: Any) {
print("ButtonPressed")
}
然而它适用于" AnyObject"发件人之后。
@IBAction func buttonPressed(_ sender: AnyObject) {
print("ButtonPressed")
}
问题1,为什么会出现这种情况?
问题2,Swift中Any和AnyObject有什么区别?
基于swift_documentation,任何允许各种类型的对象,而 anyObject 只允许相同类型的对象。在这种情况下,我认为这意味着发件人对象必须与任何属于同一类型。
这是否意味着只允许相同类型的按钮连接多个按钮,因此只有 anyObject 有效?
答案 0 :(得分:1)
最后的事情:)
如果您查看The Swift Programming Language中Any
和AnyObject
的说明,您会找到此说明:
任何可以表示任何类型的实例,包括函数类型。
AnyObject可以表示任何类类型的实例。
我在这里猜测,但@IBAction
是Apple用于在应用的不同元素之间进行通信的Target-Action模式的一部分(目标知道如何与行动相关)。由于这种模式早于Swift,我猜测一个动作的sender
必须是一个可以工作的类。在Objective C中,您将使用id
,意思是"任何类",并且在Swift中 - 正如我们刚刚发现的那样 - 表示"可以是类型的东西任何课程#34;是AnyObject
。
希望这有意义并帮助你。
答案 1 :(得分:0)
在Swift 3中,Objective-C中相当于id
的内容已从AnyObject
更改为Any
。
但是,根据定义,所有UI元素都是对象,目标/操作模式需要AnyObject
。
如果IBAction
的发件人属于同一类(或子类),您甚至可以将sender
指定为该类,例如:
@IBAction func buttonPressed(_ sender: UIButton)