我开始使用 Kitura 框架将我当前的 node.js 后端迁移到 swift,并且我开始使用模拟数据实现所有路由。
无论如何,现在我处于非常早期的阶段,并开始开发一些模拟端点并部署在 IBM Cloud 上,没有任何问题,它们运行良好。工作端点的一个示例如下:
app.router.post("/getStats") { (request, response, next) in
let mocks = Mocks()
response.send(json: mocks.dashboard)
next()
}
Mocks ()它是一个类,其中包含预定义所有字段的仪表板结构。这些字段是普通类型(字符串和数字)
当我开始开发更高级的端点时,工作流程是一样的,我用以下代码注册路由
app.router.post("/generateTest") { (request, response, next) in
let mocks = Mocks()
response.send(json: mocks.getTest())
next()
}
这个模拟结构将具有嵌套的可编码结构,而不是具有普通类型的 Codable 结构:
struct Test: Codable {
var totalTime: Int
var questions: [Question]
}
extension Test {
struct Question: Codable {
let id: String?
let pregunta: String
var selectedAnswer: Answer? = nil
let respuestas: [Answer]
let idConcepto: Int
let stats: Stats?
let categorias: [String]
}
struct Answer: Codable {
let respuesta: String
let correcta: Bool
}
struct Stats: Codable {
let globalStats: GlobalStats?
}
struct GlobalStats: Codable {
let timesFailed, timesUnanswered, timesAnswered: Int?
}
}
当我在 localhost 中构建项目时,一切正常。当我在 Postman 中浏览这些端点时,它们会返回给我预期的响应。
当我尝试将其部署到 IBM Cloud 时出现问题(也在 Heroku 上尝试过同样的问题)。
它给我的问题如下
/tmp/app/Sources/Application/Mocks/UserMock.swift:29:44: error: type of expression is ambiguous without more context
let questionFirst: Test.Question = Test.Question(id: "1", pregunta: "UNO", respuestas: answers, idConcepto: 1, stats: nil, categorias: cats)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我不知道如何解决这个问题,Xcode 没有引发任何错误并且在本地编译项目没有任何问题,我尝试转换类型和所有可能的组合来生成结构,错误总是一样的。
有人遇到过同样的问题吗?这是 Kitura 的错误还是我错过了什么?在文档中他们没有说任何关于嵌套结构的事情,我发现唯一与嵌套结构有关的是 Kitura ORM 在使用 ORM 和 SQL 数据库时不支持嵌套结构,这不是我的情况。
如果我们能找到解决方案,我会很高兴
谢谢你的帮助