swift中的throwable匿名闭包

时间:2017-07-13 11:06:41

标签: swift throw throwable

我有这段代码,但我希望通过使其更具“功能性”来改进它

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)
}()

如果没有try插入,它将完美地工作。所以我必须将我的匿名闭包标记为throwstry来执行它。

是否有可能在swift中实现这一目标?

1 个答案:

答案 0 :(得分:1)

感谢@hamish,解决方案是在整个表达式之前添加var diff = dt2.AsEnumerable().Except(dt1.AsEnumerable(), new FacilityIdComparer());

try

这似乎很奇怪,因为第一个let harbor = try Harbor.getOne(on: db, with: ["name": formattedName]) ?? { let harborId = try Harbor.insert(on: db, with: ["name": formattedName]) return Harbor.getOne(on: db, withIdentifier: harborId) }() 没有getOne任何错误。