为什么将函数类型转换为 AnyObject 有效
Why casting function type as AnyObject works
问题: Any 与 AnyObject 的区别
答案:
Any 可以表示任何类型的实例,包括函数类型和可选类型。
AnyObject 可以表示任何 class 类型的实例。
我尝试将函数类型存储在 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 中存储函数类型?
在幕后 as AnyObject
将转换值转换为 Objective-C 兼容值:Int
变为 NSNumber
,数组变为 NSArray
,并且很快。 Swift-只有值被包裹在不透明的 SwiftValue
实例中。
print(type(of: test2)) // __SwiftValue
这就是添加 as AnyObject
使您的代码编译的原因,因为运算符的右侧现在是一个对象。
问题: Any 与 AnyObject 的区别
答案: Any 可以表示任何类型的实例,包括函数类型和可选类型。
AnyObject 可以表示任何 class 类型的实例。
我尝试将函数类型存储在 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 中存储函数类型?
在幕后 as AnyObject
将转换值转换为 Objective-C 兼容值:Int
变为 NSNumber
,数组变为 NSArray
,并且很快。 Swift-只有值被包裹在不透明的 SwiftValue
实例中。
print(type(of: test2)) // __SwiftValue
这就是添加 as AnyObject
使您的代码编译的原因,因为运算符的右侧现在是一个对象。