我如何解析合并发布者的结果
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
我是联合收割机领域的新手,并且编写了一个查询 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