Any 与 AnyObject 的区别

663 阅读1分钟

Any:它可以代表任何型别的类别 (class)、结构 (struct)、列举 (enum),包括函式和可选型别,基本上可以说是任何东西。

AnyObject:它指的是类别的任何实例。这只在使用参考型别 (reference type) 时,才能派上用场。这就相等于 Objective-C 中等的 ‘id’。

Any

如果你的字典只会在 Swift 中使用,你就应该使用 Any,因为你的型别 (Int、Double、Float、String、Array、和 Dictionary) 不是物件 (object)。

而如果你会将字典传递给需要 NSDictionary 的 Objective-C 程式码,就应该使用AnyObject。

image.png

AnyObject

image.png

当你需要无型别物件的灵活性时,又或是当你使用桥接的 Objective-C方法及返回无型别结果的属性时,你就会使用 AnyObject。 AnyObject 可以用作任何类别、类别型别、或 class-only 协定的实例的具体型别。 image.png

AnyObject 协定的灵活度与 Objective-C 的 id 型别类似。因此,汇入的 Objective-C 型别经常使用 AnyObject,来作为属性、方法参数、和返回值的型别。

在你处理参考型别时使用 AnyObject,而在处理数值型别 (value type) 时使用 Any。