我是iOS开发人员,是Vapor3和Fluent-ORM框架的初学者。
我想使用3个不同的子类获取响应JSON。
实际上我做到了,但是我确定这不是一个好方法,它只是反复使用map函数。
有人知道更好的获取JSON的方法吗?
我期望得到的JSON响应如下,
"id": 2,
"friends": [
{
"id": 2,
"name": "h1ah",
"userID": 2
}
],
"enemys": [
{
"id": 1,
"name": "dragon",
"userID": 2
}
],
"name": "HI",
"pokemons": [
{
"id": 11,
"level": 1,
"name": "pokemon",
"userID": 2
},
{
"id": 12,
"level": 1,
"name": "pokem1on",
"userID": 2
},
{
"id": 14,
"level": 1,
"name": "pokem1on",
"userID": 2
}
],
"items": []
下面是我的代码。
func getA(_ req:Request) throws -> Future<[UserWithPokomon]> {
return User.query(on: req).sort(\.id, .ascending).all().flatMap({ users in
let futures = try users.map({ user in
try user.pokemons.query(on: req).all().map({ pokemons in
try user.friends.query(on: req).all().map({ friend in
try user.enemys.query(on: req).all().map({ enemies in
try user.items.query(on: req).all().map({ items in
return UserWithPokomon.init(id: user.id!, name: user.username, pokemons: pokemons, friends:friend, enemys:enemies, items:items)
})
})
})
})
})
let aaaa = futures.compactMap({ oo in
return oo.flatMap({ pp in
return pp.flatMap({
return $0.flatMap( { aa in
return aa
})
})
})
})
return aaaa.flatten(on: req)
})
}