【发布时间】:2020-08-03 22:08:17
【问题描述】:
我有一个 API,它可以返回 JSON 对象的 JSON 数组或单个 JSON 对象。
如何编写处理这种情况的组合发布者管道?
当我将组合解码运算符添加到管道时,我通常会硬编码 JSON 响应的类型:
.decode(type: [MyArrayType].self, decoder: JSONDecoder())
.decode(type: MyObjectType.self, decoder: JSONDecoder())
【问题讨论】:
-
如果可以,更改 API 以返回一个对象的数组。如果不是这样,我建议在解码阶段通过将解码提升到正确解码自身的父“响应”对象来修复它 - 大概,下游链只想处理一种类型的对象。只有这样,我才会在组合管道中解决它 - 它只是感觉不适合它
-
感谢@pawello2222 的链接。我会试试的。如果解码数组失败,我确实尝试使用组合 .catch 运算符并手动返回一个 Publishers.Decode 实例,该实例在响应中解码单个对象。但无法弄清楚如何正确获取 Decode 类型的通用签名。它想要一个“上游”类型,我不知道如何获得。再次感谢您的链接。
-
@NewDev 感谢您的评论。我无法更改 API(希望可以)。我正在探索联合的做事方式。而且我有一个可重用的通用组合管道,它可以将任何数组响应解码到发布者,该发布者将该响应数组的元素作为输出值发出。我想扩展该组合管道以处理响应不是数组的情况。但是,当然,正如您所说,它可能是将逻辑移至其他地方的最佳解决方案。不是每个问题都是钉子,只是因为你有一把锤子等:)