我有这段代码,但我希望通过使其更具“功能性”来改进它
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
插入,它将完美地工作。所以我必须将我的匿名闭包标记为throws
和try
来执行它。
是否有可能在swift中实现这一目标?
答案 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
任何错误。