问题:任何对象与任何对象之间的区别
回答:
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/