在这个例子中,哪个是适当的约定?
static func getWindowSize(scene: SKScene) -> NSRect? {
if let windowSize = scene.view?.bounds {
return windowSize
} else {
print("Could not get window size")
}
return NSRect()
}
OR
static func getWindowSize(scene: SKScene) -> NSRect? {
guard let windowSize = scene.view?.bounds else {
print("Could not get window size")
return NSRect()
}
return windowSize
}
答案 0 :(得分:3)
这就是我要做的事情:
static func getWindowSize(scene: SKScene) -> NSRect? {
return scene.view?.bounds ?? NSRect()
}
顺便说一下。由于您的代码始终返回有效NSRect
,因此您可以返回NSRect
而不是NSRect?
答案 1 :(得分:2)
在您的示例中,它实际上没有区别,因为除了返回之外的任何地方都不使用windowSize
。但是,如果您使用windowSize
获得更多代码,则会越来越多地if let
进一步推送您的代码标签。此外,您还需要记住具有该变量的范围何时结束,有时可能很难。 Guard可让您保持流程简单,因为您确定windowSize在整个块中是正确的值,而不仅仅在if let
正块中。
但是为了简化当前的代码,因为你返回一个Optional,如果你无法获得窗口大小,你可以返回nil而不是空NSRect()
。
您的guard
示例没问题(您可以将return NSRect()
更改为return nil
),但在if let
我会将其更改为:
static func getWindowSize(scene: SKScene) -> NSRect? {
if let windowSize = scene.view?.bounds {
return windowSize
} else {
print("Could not get window size")
return nil
}
}