我刚刚构建了一个SpriteKit演示应用程序。 我下面(as!SKView?)和(as?SKView)之间的区别
if let view = self.view as! SKView? {
...
}
的代码是什么(如self.view!SKView?),这意味着在不? 为什么他们不写这样的代码:
if let view = self.view as? SKView {
...
}
有什么区别? 非常感谢!
我刚刚构建了一个SpriteKit演示应用程序。 我下面(as!SKView?)和(as?SKView)之间的区别
if let view = self.view as! SKView? {
...
}
的代码是什么(如self.view!SKView?),这意味着在不? 为什么他们不写这样的代码:
if let view = self.view as? SKView {
...
}
有什么区别? 非常感谢!
self.view
是力铸于(又名Optional<SKView>
)。如果此投射失败(当self.view
实际上不是)时,程序将崩溃以防止进入不一致状态。
产生的然后展开安全并分配给view
如果不是nil
,否则,在执行else
情况下,如果有一个。
self.view
安全地转换为SKView
。这个表达式的结果是SKView
。它会有一个有效的值(如果演员是可能的话),或者如果演员不可能的话nil
。不像第一种情况,它不会崩溃。
产生的然后展开安全并分配给view
如果不是nil
,否则,在执行else
情况下,如果有一个。
if let view = self.view as? SKView { ... }
这意味着,如果视图可以转换为SKView,那么做,否则不要这样做。这是安全的,因为它不会使程序崩溃并且被推荐。这就是问号的含义。它可以铸造成SKView吗?
if let view = self.view as! SKView? { ... }
这真的不应该使用。你说这个视图应该强制转换为一个可选的SKView,如果SKView可以解包,它将会起作用。就像其他用户所说,它是重复性的,即使它不会给你一个错误也不应该使用。
第一种语法(*强制展开*可选的可选项)是一个矛盾,并且根本不应该使用。我希望编译器在可选绑定中使用时发生错误。 – vadian
[在Swift中转换为泛型可选]的可能副本(http://stackoverflow.com/questions/32080420/casting-to-generic-optional-in-swift) –
@Eric你的问题得到了解答吗? – Alexander