当前位置: 首页 > 面试题库 >

Swift中的AnyObject和Any

宋飞舟
2023-03-14
问题内容

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

就我而言,我有字典

[字串:???]

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

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

阿拉克


问题答案:

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



 类似资料:
  • 问题内容: 考虑此函数,该函数采用通用参数,并根据谓词过滤数组。这与Swift提供的功能相同。 这有什么不同 即使在后面的示例中,我们也无法达到泛型的意义吗? 问题答案: 泛型是类型安全的,这意味着如果您将字符串作为泛型传递并尝试将其用作整数,则编译器会抱怨并且您将无法编译您的(很好)。(发生这种情况是因为Swift使用的是 Static类型 ,并且能够给您一个 编译器 错误 ) 如果使用AnyO

  • 问题内容: 我在Swift中有一组对象。每个对象都有餐厅的属性,例如名称,类型,位置等。如果我想将数组中所有包含类型的对象保留为“ Sushi”,该如何过滤数组。 具有2个对象的示例数组。过滤器应保留第一个对象(类型:sushi): 当前代码(但我不确定过滤器是否可以搜索的数组): 问题答案: 您的数组,是一个对象数组。因此,对于数组,您可以执行以下操作: 基于我们正在处理自定义对象的假设,我的原

  • 本文向大家介绍swift中AnyObject和Any的介绍与区别详解,包括了swift中AnyObject和Any的介绍与区别详解的使用技巧和注意事项,需要的朋友参考一下 诞生 swift 作为新起步的语言,必然抛不掉一些历史遗留包袱。用过 Objective-C 的同学肯定知道有一种叫做 id 的类型。他可以表示任意类的实例,编译器不会对其类型声明的变量进行检查。在用 swift 做 app 开

  • 问题内容: 今天在与Swift交往时,我遇到了一件奇怪的事情。这是我开发的单元测试,显示了使用Swift的AnyObject时的一些意外行为。 这段代码简化了一些其他代码,其中只有一个Swift函数只能返回。 不出所料,在创建的实例之后,将其强制转换为并设置另一个变量,由于没有这样的属性,因此无法编译该属性。 但令人惊讶的是,编译器接受了一个名为的属性,因为on上有该名称的属性。看起来,只要它在运

  • 问题内容: 嗨,我有一个NSMutableArray,我尝试这样做: 如何将Int64变量添加到NSMutableArray()? 问题答案: 您正在使用基础数组(NSMutableArray),因此应使用基础编号对象: 您还可以使用本机swift数组:

  • 问题内容: 我无法理解AnyObject的局限性。 您可以从标题中看到Array是一个结构。但是,此代码有效: 而且不只是文字数组: 但是,我不能为我分配一个结构: 那么,数组毕竟不是真正的结构吗? 问题答案: 这是桥接出现时最有趣的部分… 默认情况下,Swift bridge (和朋友) 至 至 因此,如果需要,编译器会将它们更改为对象 你可以做 并且您不能将/ 分配给,因为它们不是对象类型(可