我如何解析合并发布者的结果

How do i parse results from a combine publisher

我是联合收割机领域的新手,并且编写了一个查询 returns 我需要的结果是正确的。它是多步骤的,但基本上是通过网络进行 api 调用,解析返回的 json 并创建我需要的记录数组。

let results2: Publishers.Map<Publishers.ReceiveOn<Publishers.Decode<Publishers.Map<URLSession.DataTaskPublisher, JSONDecoder.Input>, Wrapper<Question>, JSONDecoder>, DispatchQueue>, [Question]>

我正在尝试重写我的部分代码,但我意识到我仍然不太了解解析结果的来龙去脉。 如果查看 results2 的数据类型,您会看到最后一部分包含一个 Question 数组。如何将此数组分配给变量,如:

let finalAnswer: [Question] = turnThisIntoAnArray(results2)

如果可能的话,我希望对这个一般性问题给出一般性回答,而不是提供重新创建这个特定发布商字符串所需的所有代码。

谢谢

在这个工作示例中,请注意下面的变量 results

  func runQuery() {
     let env = BespokeEnvironment(mainQueue: .main, networkQuery: NetworkQuestionRequestor())
     results = env.networkQuery.reviewedQuestionsQuery(pageCount: 1)
        .sink(
           receiveCompletion: { print([=10=])},
           receiveValue: { values in
              returnValues.append(contentsOf: values)
           })
     }

我原来有:

 let results =
   ...

并且没有得到任何记录。事实证明该方法在发布者完成之前完成并返回。

在 non-working 代码中,可取消项的保存时间不够长,发布者无法完成。所以我将 results 移动到父视图中并使其成为 @State 变量。现在一切正常。

   @State var results: AnyCancellable? = nil