我刚刚建立了一个SpriteKit演示应用程序。我没有在下面的代码下面
if let view = self.view as! SKView? {
...
}什么是(self.view as!SKView?)意思是?为什么他们不像这样写代码:
if let view = self.view as? SKView {
...
}有什么关系呢?非常感谢!
发布于 2016-12-16 08:56:24
案例1
self.view是强制传递给SKView? (a.k.a )的。Optional<SKView>)。如果此转换失败(当self.view实际上不是SKView?),则程序将崩溃,以防止进入不一致的状态。
如果结果SKView?不是nil,则安全地展开它并将其分配给view,否则将执行else案例(如果存在的话)。
案例2
self.view被安全地转换为SKView。这个表达式的结果是一个SKView。它将具有一个有效值(如果强制转换是可能的),或者如果不可能,则具有nil。不像第一个案例,它不会崩溃。
如果结果SKView?不是nil,则安全地展开它并将其分配给view,否则将执行else案例(如果存在的话)。
发布于 2016-12-17 02:00:01
if let view = self.view as? SKView { ... }这意味着如果视图可以转换为SKView,那么就执行它,否则不要执行它。这是安全的,因为它不会崩溃的程序和建议。这就是问号的意思。它可以转换为一个SKView吗?
if let view = self.view as! SKView? { ... }这真的不应该被使用。您是说视图应该强制转换到一个可选的SKView,如果可以打开SKView,它就能工作。就像另一个用户说的,它是重复的,即使它不会给出错误,也不应该使用。
https://stackoverflow.com/questions/41180417
复制相似问题