Swift 什么';(as!SKView?)和(as?SKView?)之间的区别是什么
我刚刚创建了一个SpriteKit演示应用程序。 我不知道下面的代码Swift 什么';(as!SKView?)和(as?SKView?)之间的区别是什么,swift,Swift,我刚刚创建了一个SpriteKit演示应用程序。 我不知道下面的代码 if let view = self.view as! SKView? { ... } (self.view as!SKView?)是什么意思? 他们为什么不这样写代码呢: if let view = self.view as? SKView { ... } 有什么区别? 非常感谢!案例1 self.view强制转换为SKView?(又称可选)。如果此转换失败(当self.v
if let view = self.view as! SKView? {
...
}
(self.view as!SKView?)是什么意思?
他们为什么不这样写代码呢:
if let view = self.view as? SKView {
...
}
有什么区别?
非常感谢!案例1
self.view
强制转换为SKView?
(又称可选)。如果此转换失败(当self.view
实际上不是SKView?
时),则程序将崩溃以防止进入不一致状态
如果结果SKView?
不是nil
,则安全地展开并分配给view
,否则执行else
案例(如果有)
if let view = self.view as? SKView { ... }
案例2
self.view
安全地转换为SKView
。此表达式的结果是一个SKView
。它将有一个有效值(如果可以进行转换),或者如果无法进行转换,则为nil
。与第一种情况不同,它不会崩溃
如果结果SKView?
不是nil
,则安全地展开并分配给view
,否则执行else
案例(如果有)
if let view = self.view as? SKView { ... }
这意味着,如果视图可以强制转换为SKView,则执行该操作,否则不执行该操作。这是安全的,因为它不会使程序崩溃,建议使用。这就是问号的意思。它能被转换成SKView吗
if let view = self.view as! SKView? { ... }
这真的不应该被使用。您的意思是,视图应该强制转换为可选的SKView,如果SKView可以展开,则该SKView将起作用。与另一位用户所说的一样,它是重复的,即使不会给您带来错误,也不应该使用。第一种语法(强制将可选项展开为可选项)在术语上是矛盾的,根本不应该使用。我希望编译器在可选绑定中使用时抛出错误。可能重复@Eric的问题得到了回答吗?我在Xcode 8.2创建的SpriteKit默认演示中获得了这些代码。我认为开发人员使用(as!)是因为他想表示(self.view)已经设置为SKView实例,并且永远不会为零。同时,他想使用(if-let)语法,所以他需要一个可选类型(SKView?)。也许这只是一种习惯,根本没有必要。它会的。@Appzyourlife谢谢,Alexander。虽然我仍然不太理解演示中代码的含义。也许这只是一种语法,不需要太多注意。@Eric我的意思是,我给出的解释完全针对脑海中的特定示例。也许试着问我后续问题ns,我将尝试解决这个困惑。这不仅仅是语法,这两个选项在语义上是不同的。了解它们的区别绝对重要