首页 > 解决方案 > 为什么将函数类型转换为 AnyObject 有效

问题描述

问题: Any 与 AnyObject 之间的区别

答: Any可以表示任何类型的实例,包括函数类型和可选类型。

AnyObject可以表示任何类类型的实例。

我试图将函数类型存储在 Any 和 AnyObject 变量中

func add(a: Int, b: Int) -> Int {
    return a + b
}
let funcType = add
let test1: Any = funcType
let test2: AnyObject = funcType//Value of type '(Int, Int) -> Int' does not conform to specified type 'AnyObject' Insert ' as AnyObject'

当我使用修复选项时

let test2: AnyObject = funcType as AnyObject

它可以正常工作,没有任何错误。如何将函数类型存储在 AnyObject 中?

标签: swiftanyobject

解决方案


在幕后as AnyObject将转换的值转换为与 Objective-C 兼容的值:Int's become NSNumber,array's become NSArray,等等。仅 Swift 的值被包裹在不透明的SwiftValue实例中。

print(type(of: test2)) // __SwiftValue

这就是为什么添加as AnyObject会让你的代码编译,因为运算符的右手现在是一个对象。


推荐阅读