我刚刚构建了一个SpriteKit演示应用程序。 我不在下面的代码中
if let view = self.view as! SKView? {
...
}
(self.view as!SKView?)是什么意思? 他们为什么不写这样的代码:
if let view = self.view as? SKView {
...
}
有什么区别? 非常感谢!
答案 0 :(得分:1)
new AuthenticatedRequest(request, None)
强制投放到self.view
(a.k.a。SKView?
)。如果此强制转换失败(当Optional<SKView>
实际上不是self.view
时),则程序将崩溃以防止进入不一致状态。
然后安全地展开生成的SKView?
并将其分配给SKView?
,如果它不是view
,否则执行nil
个案(如果有的话)。
else
被安全地投放到self.view
。该表达式的结果是SKView
。它将具有有效值(如果可以进行强制转换),或者SKView
如果无法进行强制转换。与第一种情况不同,它不会崩溃。
然后安全地展开生成的nil
并将其分配给SKView?
,如果它不是view
,否则执行nil
个案(如果有的话)。
答案 1 :(得分:0)
if let view = self.view as? SKView { ... }
这意味着如果视图可以转换为SKView,那么就这样做,否则不要这样做。这是安全的,因为它不会使程序崩溃并被推荐。这就是问号的含义。它可以作为SKView投射吗?
if let view = self.view as! SKView? { ... }
这根本不应该被使用。您是说应该强制将视图强制转换为可选的SKView,如果可以打开SKView,它将起作用。像其他用户说的那样,它是重复的,即使它不会给你一个错误也不应该被使用。