首页 > 解决方案 > 为什么有必要从 Optional 强制转换为 Any?

问题描述

我已经看到了几个关于“表达式从一个隐式强制Optional转换到Any”(例如thisthis)的问题,但我没有找到一个解释为什么Optional不“包含”在 中的原因Any,因为根据 Apple 的 Swift 标准库,Optional是泛型enum类型。

Anyprint函数需要参数,因此提供Optional会给出警告消息。但是,既然Optional是枚举类型,那么它不应该也是一种Any类型吗?为什么Optional作为枚举类型,不是Any编译器需要转换Optional为的类型的一部分Any

标签: swiftoptional

解决方案


的目的Optional是防止您意外调用方法或访问变量的属性nil

你是对的,Optional可以分配到Any。任何东西都可以分配给Any. 但是看看现在发生了什么!我已经将一个可以nil转换为非可选类型的值Any!如果以某种方式将此值传递给其他地方并且其他一些程序员(或将来的您)会假设它具有非零值。

因此,编译器警告会提醒您,您可能忘记了打开选项。


推荐阅读