【发布时间】:2017-07-13 11:06:40
【问题描述】:
我有这段代码,但我想稍微改进一下,让它更“实用”
var person = Person.getOne(on: db, with: ["name": name])
if person == nil {
let personId = try Person.insert(on: db, with: ["name": name])
person = Person.getOne(on: db, withIdentifier: personId)
}
所以我做到了:
let harbor = Harbor.getOne(on: db, with: ["name": formattedName]) ?? {
let harborId = try Harbor.insert(on: db, with: ["name": formattedName])
return Harbor.getOne(on: db, withIdentifier: harborId)
}()
如果没有 trying 插入,它将完美地工作。所以我必须将我的匿名关闭标记为throws 和try 才能执行它。
是否可以快速实现这一目标?
【问题讨论】:
-
只有函数、方法或初始化器可以
throw -
你可以说
let harbor = try Harbor.getOne... -
哦@hamish,看来你是对的!我尝试将
try放在??之后,但它不起作用。将它放在getOne(不抛出)之前可以解决问题。 -
用
try!代替try怎么样,但如果值以某种方式导致nil确实不推荐,这可能会导致崩溃 -
try!是一个糟糕的选择,因为 1/ 它强制展开,2/ 它阻止处理错误