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
。