【发布时间】:2014-12-05 22:50:31
【问题描述】:
假设我有一个返回可选的函数。如果错误则为零,如果成功则返回值:
func foo() -> Bar? { ... }
我可以使用以下代码来处理这个函数:
let fooResultOpt = foo()
if let fooResult = fooResultOpt {
// continue correct operations here
} else {
// handle error
}
但是,对于任何重要的代码,这种方法几乎没有问题:
最后进行了错误处理,很容易漏掉一些东西。当错误处理代码跟随函数调用时,这会好得多。
正确的操作代码缩进一级。如果我们要调用另一个函数,我们必须再缩进一次。
使用 C 的人通常可以这样写:
Bar *fooResult = foo();
if (fooResult == null) {
// handle error and return
}
// continue correct operations here
我找到了两种使用 Swift 实现相似代码风格的方法,但我都不喜欢。
let fooResultOpt = foo()
if fooResult == nil {
// handle error and return
}
// use fooResultOpt! from here
let fooResult = fooResultOpt! // or define another variable
如果我写“!”到处都是,它看起来不合我的口味。我可以引入另一个变量,但这看起来也不太好。理想情况下,我希望看到以下内容:
if !let fooResult = foo() {
// handle error and return
}
// fooResult has Bar type and can be used in the top level
我是否遗漏了规范中的某些内容,或者是否有其他方法可以编写好看的 Swift 代码?
【问题讨论】:
标签: swift error-handling optional