swift - 为什么将函数类型转换为 AnyObject 有效

标签 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 变为 NSNumber,数组变为 NSArray,等等。仅限 Swift 的值被包装在不透明的 SwiftValue 实例中。

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

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

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

相关文章:

Swift AnyObject 的下标,从哪里来的?

swift - 仅类协议(protocol)作为具有 AnyObject 约束的关联类型的类型别名

ios - 如何制作两行水平 Collection View ?

ios - 从 AnyObject 转换为 CGColor?没有错误或警告

swift - Xcode 8 在 Swift 3 中的语法变化

types - 在 swift 中检测对象是否恰好是特定类型而不是该类型的子类

ios - swift 3 - ios : convert anyObject to string

xcode - 从 JavaScript 调用 swift 方法挂起 xcode 和应用程序

Swift NSTimer 异常

ios - 调用将 UIViewController 插入闭包内部的函数,就好像它在外面一样