一尘不染

Swift中的AnyObject和Any

swift

我不明白何时在Swift中使用AnyObject以及何时使用Any。

就我而言,我有字典

[字串:???]

??? :可以是Int,Double,Float,String,Array,Dictionary

有人可以向我解释Any和AnyObject之间的区别以及在我的情况下使用哪个。

阿拉克


阅读 174

收藏
2020-07-07

共1个答案

一尘不染

AnyObject仅适用于引用类型(类),Any适用于值和引用类型。

所以你应该去[String: Any]

类型转换为Any和AnyObject

Swift提供两种特殊类型来处理非特定类型:

  • Any 可以代表任何类型的实例,包括函数类型。
  • AnyObject 可以代表任何类类型的实例。

注意:

使用AnyAnyObject只有当你明确需要的行为和能力,他们提供的。最好对要在代码中使用的类型进行具体说明。

雨燕编程语言
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342

--

还要注意,当您使用Cocoa API时,通常会收到一个AnyObject数组,这是因为没有标明Objective-
C数组。因此,您需要将它们转换为所需的数组类型。

--

编辑: (2015
年12月22日)在最后一条语句中,请注意,这在Swift 2.0和Xcode 7中正在发生变化
。Apple 在Objective-C中引入了“轻量级”泛型,因此许多Cocoa API现在已经返回了正确的类型。

编辑: (2016年10月18日)
请注意,自Swift 3.0起,id现在将Objective-C 导入为Any,不再是AnyObject

2020-07-07