swift - 为什么将函数类型转换为 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 中?
解决方案
在幕后as AnyObject
将转换的值转换为与 Objective-C 兼容的值:Int
's become NSNumber
,array's become NSArray
,等等。仅 Swift 的值被包裹在不透明的SwiftValue
实例中。
print(type(of: test2)) // __SwiftValue
这就是为什么添加as AnyObject
会让你的代码编译,因为运算符的右手现在是一个对象。
推荐阅读
- .net - 在 SQL Server 中存储特殊的 unicode 字符并在 .NET 中检索
- git - `git fetch, pull, and push` 的“正常快进安全检查”是什么意思?
- scala - 在 spark sql 中优化分区数据写入 S3
- python - 无法在 python 中处理 EmptyDataError
- python - 对数据框进行分组并根据条件在其中选择一个单元格
- java - 将额外的值添加到 spring bean 列表中
- javascript - Lodash - 选择不在数组中的元素
- scala - 使用相同的方法混合特征和基类
- jenkins - 我想动态更改视图中每个作业的自定义工作区
- python - 是否可以从 sql alchemy 会话中检索引擎值