我是联合收割机领域的新手,已经编写了一个查询,可以正确返回所需的结果。它是多步骤的,但基本上是通过网络进行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($0)},
receiveValue: { values in
returnValues.append(contentsOf: values)
})
}
我最初有:
let results =
...
而且没有得到任何记录。事实证明,这个方法在出版商完成之前就已经完成并返回了。
在非工作代码中,可取消内容的保存时间不够长,发布者无法完成。因此,我将results
移到父视图中,并使其成为@State
变量。现在一切正常。
@State var results: AnyCancellable? = nil