Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法找到使联接查询结果在Vapor 3中可编码的方法_Swift_Vapor - Fatal编程技术网

Swift 无法找到使联接查询结果在Vapor 3中可编码的方法

Swift 无法找到使联接查询结果在Vapor 3中可编码的方法,swift,vapor,Swift,Vapor,我想在叶模板中显示join查询(调试显示正在运行)的结果: persons.get("/persons") { request ->Future<View> in return Title.query(on:request).join(\Person.titleId, to:\Title.id) .alsoDecode(Person.self).all().flatMap(to: View.self) { pers in

我想在叶模板中显示
join
查询(调试显示正在运行)的结果:

persons.get("/persons")
{ request ->Future<View> in
    return Title.query(on:request).join(\Person.titleId, to:\Title.id)
                .alsoDecode(Person.self).all().flatMap(to: View.self)  { pers in
        let context = APContext(title: "Demo", personnel: pers)
        let leaf = try request.make(LeafRenderer.self)
        return leaf.render("persons", context)
    }
}
已过期,因为它建议将
personal
属性创建为
EncodableStream
将起作用,但此属性已被删除。如果使用上面的
结构
,则会出现编译错误:

类型“APContext”不符合协议“Encodable”

如果我简化查询,使定义变为:

let personnel = [Person]
然后它就起作用了


因此,我想我的问题可以归结为:我如何使
[(标题,人物)]
可编码?

多亏了Leo的建议,我得到了一个解决方案:

struct Personnel: Encodable {
    let title: Title
    let person: Person
}
并在路线中包括以下内容:

var enc: [Personnel] = []
for per in pers {
    enc.append(Personnel(title:per.1,person:per.0))
}

enc
现在可以传递到叶模板。唯一需要注意的是标记必须包括
人员
结构中的字段名,例如
每个人.姓

使用两个属性而不是tupleThanks@LeoDabus创建一个
结构人员
。我用了你的建议——看看我的答案。
var enc: [Personnel] = []
for per in pers {
    enc.append(Personnel(title:per.1,person:per.0))
}