@IBAction func helloClick(sender: AnyObject) {
sender.setTitle("Click", forState: UIControlState.Normal)
}
上面的代码工作正常。但setTitle
上的AnyObject
不是一种方法吗?这不应该是编译时错误吗?
答案 0 :(得分:4)
这是语言规范的一部分(请参阅id compatibility)
部分您还可以调用任何Objective-C方法并访问任何属性(On AnyObject),而无需转换为更具体的类类型。
这是为了更容易实现Objective-C互操作。
指南还说明了以下内容:
但是,因为在运行时才知道输入为AnyObject的对象的特定类型,所以可能会无意中编写不安全的代码。
显然,由于代码的有效性仅在运行时确定,因此可能不安全。
答案 1 :(得分:3)
AnyObject
与Objective-C id
它允许在其上调用任何方法。 AnyObject
的目的是以绕过编译时错误。你可以调用AnyObject
上的任何方法,它将编译正常。您只会在运行时看到错误。
根据文档,
您还可以调用任何Objective-C方法并访问任何属性(On AnyObject),而无需转换为更具体的类类型。