问题:任何对象与任何对象之间的区别
回答:
any可以表示任何类型的实例,包括函数类型和可选类型。
任何对象都可以表示任何类类型的实例。
我尝试将函数类型存储在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

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

最佳答案

在幕后,as AnyObject将铸造值转换为与Objective-c兼容的值:Int变为NSNumber,数组变为NSArray等等。swift-only值被包装在不透明的SwiftValue实例中。

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

这就是为什么添加as AnyObject会使代码编译,因为操作符的右边现在是一个对象。

关于swift - 为什么将函数类型转换为AnyObject有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57760678/

10-13 09:38