Vapor Swift Fluent:没有更多的上下文,表达式类型不明确

8
这是我的路由信息:
router.get("answers","delete", Int.parameter) { req -> Future<Response> in

        let answerID = try req.parameters.next(Int.self)
        guard let _ = getUsername(req) else {
            throw Abort(.unauthorized)
        }
        return Message.query(on: req).filter(\.id == answerID).first().map(to: Response.self) { answer in
            guard let answer = answer else {
                throw Abort(.notFound)
            }
            return answer.delete(on: req).map(to: Response.self) { _ in
                return req.redirect(to: "/answers")
            }
        }
    }

但对于xCode来说,这个上下文不够明确,需要更多信息:.filter(\.id == answerID)

以下是我的结构体Message:

struct Message: Content, SQLiteUUIDModel, Migration {
var id: UUID?
var username: String
var content: String
var category: String
var question: String
var date: Date

我不明白为什么在许多其他路由中使用ID过滤器时,这是我第一次出现这个错误。

我在谷歌上搜索了一下,似乎当Fluent没有被导入时会出现这个错误,但我已经在顶部import Fluent了。


9
你尝试过使用你选择的数据库导入吗?例如:import FluentMySQL,或者import FluentPostgreSQL... - LoVo
1
是的,import FluentSQLite - Thomas Schmitt
你是否意识到你正在尝试使用ID(UUID?)和answerID(Int)进行匹配? - LoVo
哦!你说得对!谢谢 :-) - Thomas Schmitt
3
我确实在我的文件中漏掉了 import Fluent。🤦‍♂️ - Koen.
1个回答

3
我刚刚有时间测试了您的代码。如果您将

替换为:
...   .map(to: Response.self) { answer in ....

使用

... .flatMap(to:Response.self) { answer in ...

它有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接