Swift 新的as有什么用!接线员有吗?

Swift 新的as有什么用!接线员有吗?,swift,operators,downcast,Swift,Operators,Downcast,我不太明白是什么新功能操作员应添加。 说: as运算符将表达式强制转换为指定类型。as运算符返回指定类型的值,而不是可选类型。如果强制转换失败,将引发运行时错误。xas的行为!T与(x as?T)的行为相同 似乎使用as只有在您知道向下广播将成功时才有意义,否则将触发运行时错误。但是,当我知道下行将成功时,我只使用as操作符。既然这两个asnor作为返回可选值,它们甚至返回完全相同的类型。 也许我遗漏了什么,但有什么意义呢?有些情况下,作为程序员,您可以知道as会成功,但编译器无法确定这一点。在

我不太明白
是什么新功能操作员应添加。
说:

as运算符将表达式强制转换为指定类型。
as运算符返回指定类型的值,而不是可选类型。如果强制转换失败,将引发运行时错误。
xas的行为!T
(x as?T)的行为相同


似乎使用
as只有在您知道向下广播将成功时才有意义,否则将触发运行时错误。但是,当我知道下行将成功时,我只使用
as
操作符。既然这两个
as
nor
作为
返回可选值,它们甚至返回完全相同的类型。

也许我遗漏了什么,但有什么意义呢?

有些情况下,作为程序员,您可以知道
as
会成功,但编译器无法确定这一点。在这种情况下,
as
是编译时错误,但是
as
将编译。

as
(no bang)运算符用于该语言保证成功的强制转换-主要是指从子类型强制转换到其祖先类型之一

as
as?
运算符用于语言无法保证成功的强制转换。当您有一个常规类型并希望将其作为一个更具体的子类型时,这一点就起作用了。编译器不知道哪个子类型可能真的隐藏在常规类型后面——这些信息可以在运行时确定——因此,就语言所知,强制转换可能会失败

as?
as之间的区别是如何处理该故障的。对于前者,演员阵容的结果会被包装在一个可选选项中,迫使你为失败做准备,并允许你以一种对你的应用程序有意义的方式来处理它。后者假设演员阵容会成功,因此你不会被迫检查失败,如果你的假设被证明是错误的,你只会崩溃

那么为什么要使用
作为?它与隐式解包的可选项具有相同的作用:您可以使用它(自行承担风险)来处理某些行为由语言外部的某些因素“保证”的情况(即使语言本身无法保证),这样您就不必编写代码来测试预期不会发生的故障。这种情况最常见的一种情况是,当您依赖于另一个类的运行时行为时—该语言并没有说
UIView
子视图
数组必须包含其他
UIView
s,但它的文档向您保证它会


在Swift 1.2之前,没有
as-
as
包括可能崩溃的情况和无法崩溃的情况。新的操作员要求您清楚地知道您所做的事情是否总是成功的,您期望总是成功的,以及您计划测试失败的事情

“但是,当我知道向下转换将成功时,我只使用as运算符。”但是,如果编译器不知道向下转换将成功,它将不允许您使用Swift 1.2中的
as