(作为!SKView?)和(作为?SKView)之间有什么区别?

时间:2016-12-16 08:49:16

标签: swift

我刚刚构建了一个SpriteKit演示应用程序。 我不在下面的代码中

if let view = self.view as! SKView? {
        ...
    }

(self.view as!SKView?)是什么意思? 他们为什么不写这样的代码:

if let view = self.view as? SKView {
        ...
    }

有什么区别? 非常感谢!

2 个答案:

答案 0 :(得分:1)

案例1

new AuthenticatedRequest(request, None)强制投放到self.view(a.k.a。SKView?)。如果此强制转换失败(当Optional<SKView>实际上不是self.view时),则程序将崩溃以防止进入不一致状态。

然后安全地展开生成的SKView?并将其分配给SKView?,如果它不是view,否则执行nil个案(如果有的话)。

案例2

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,它将起作用。像其他用户说的那样,它是重复的,即使它不会给你一个错误也不应该被使用。