Swift 有两种匿名类型:Any和AnyObject。它们略有不同,但您迟早需要使用它们。下面谈谈它们的区别
AnyObject指类的任何实例,相当于Objective-C 中的id类型 。当您特别想使用引用类型时,它很有用。对于Swift 的结构或枚举等非引用类型则不能使用。当您想限制协议以便它只能与类一起使用时,也可以使用AnyObject。
protocol PickerDelegate: AnyObject {
func didPickDocument(document: AudioDocument?)
}
Any指的是类、结构或枚举的任何实例——实际上是Swift语言支持的一切类型。在 Swift 中,无论类型未知或以有意义的方式去混合使用,您都会见到它:
let values: [Any] = [1, 2, "Fish"]
理想情况下,您应该避免在代码中同时使用Any和AnyObject- 如果可以的话,最好对你的要使用的类型给出具体的实现。