类型转换:* [as!] * vs. * [as?] *

类型转换是一种出色的工具,可帮助实现OOP(面向对象编程)。 类型转换是检查实例类型的方法,|| 将该实例视为与其自身类层次结构中其他地方不同的超类或子类。

Swift中的类型转换使用isas实现? / 作为! 操作员。 这两个运算符提供了一种简单而富有表现力的方式来检查值的类型或将值转换为其他类型。 但是,我们将仅专注于吗?

如? :预期元素的可选。 如果要实现这一点,我们会说:“嘿,我不确定所说的元素是否属于这种类型。 如果不是,则返回nil并且不要使我的应用程序崩溃。”

如! :强制展开元素的可选。 如果要实现这一点,我们会说“嘿,我确定这个元素是这种类型的,我不需要返回nil,因为它将起作用。”

投射仅通过两种方式起作用:

  1. Down Cast:从父类转换为子类。
  2. 快播:从子类到父类。

上投:

在此示例中,我创建了两个类。 父类:人类,具有子类(成人)。 我创建了👩🏾,并将其设置为Humans,其子类为Adults。 从这一点开始,无论类型如何转换? 要么 ! 将起作用,因为父类型为Humans的is。 但是,当我们看待我们设定为重视人类的要素时,有一个警告, 但却是一个好警告。

不,严重的是,此错误仅警告我们:从成人到成人的有条件强制转换将始终成功。 因此[!]运算符与否,我们知道这将毫无错误地发生。

下调:

在此示例中,我创建了三个类。 超级类:人类,子类:成年人,子类:TinyHumans。 当我尝试给它键入Adults时,它仍然以TinyHumans的形式返回。 但是,一旦我将值更改为Adult并尝试将其类型转换为原始类型并将其子类化,则返回nil。

哦,是的!

当我申请为! 在我的代码中,它显然给了我一个错误,我们知道会发生错误,因为? 返回零。

所以不要以这样沮丧的年轻人而结束…..

我们将用作? 永远永远解决我们的类型问题。

如有任何疑问或意见,请输入Google! 😀