Swift AnyObject

  • AnyObject can represent an instance of any class type.
  • Any can represent an instance of any type at all, including function types.

桥接ObjC

Swift 并未完全重写CocoaTouch 的库,所以在一些调用CocoaAPI 的情况下,ObjC中未明确一些东西,在返回到Swift中,会用 AnyObject / Any 代替。

也就是说 这两个东西的存在主要是为了 Bridging ObjC。

像我们在定义ToolBarItem时,就会遇到这个AnyObject

1
2
var destinationViewController: AnyObject
var toolbarItems: [AnyObject]

AnyObject

AnyObject 是一种类型吗,就像Array?
实际上不是,它是一种协议。 指向未知对象的指针。

1
2
3
// AnyObject 的定义,可以发现它其实就是一个协议
protocol AnyObject {
}

Any

除了 class 以外,Any 可以表示包括 struct 和 enum 在内的所有类型。

转换安全

  • is 检查一个实例是否属于特定子类型
  • as? 返回一个你试图下转成的类型的可选值(optional value)
  • as! 试图向下转型和强制解包(force-unwraps)

REF::