在 TCA 中:不在 reducer 中时如何从 Effect 中提取?
In TCA: How to extract from Effect when not in the reducer?
我在 Effect<[Int], Error>
中收到了来自出版商的结果
如何将 [Int] 分配给变量?
虽然我可以用这个得到结果:
case .reviewed:
return environment.networkQuery.reviewed(pageCount: 1)
.catchToEffect()
.map(BespokeAction.processQueryResults)
case let .processQuestionResult(.success(ids)):
...
case let .processQuestionResult(.failure(error)):
print(error)
...
我想在 reducer 之外使用发布者:
let values: Effect<[Question], Error> = environment.networkQuery.reviewed(pageCount: 1)
成功后如何values
提取数组?
注意:这是对我之前发布的问题的更精细解决:
虽然代码大部分都不错,但我从未看到结果。
这是因为代码在函数内部,并且可取消随着函数返回而消失。当可取消超出范围时,发布者立即停止。
我将 results
和 returnValues
移动到视图中,现在在 receiveValue
闭包中更新 @State
属性:
@State var returnValues = [Question]()
@State var results: AnyCancellable? = nil
....
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)
})
}
我在 Effect<[Int], Error>
中收到了来自出版商的结果
如何将 [Int] 分配给变量?
虽然我可以用这个得到结果:
case .reviewed:
return environment.networkQuery.reviewed(pageCount: 1)
.catchToEffect()
.map(BespokeAction.processQueryResults)
case let .processQuestionResult(.success(ids)):
...
case let .processQuestionResult(.failure(error)):
print(error)
...
我想在 reducer 之外使用发布者:
let values: Effect<[Question], Error> = environment.networkQuery.reviewed(pageCount: 1)
成功后如何values
提取数组?
注意:这是对我之前发布的问题的更精细解决:
虽然代码大部分都不错,但我从未看到结果。
这是因为代码在函数内部,并且可取消随着函数返回而消失。当可取消超出范围时,发布者立即停止。
我将 results
和 returnValues
移动到视图中,现在在 receiveValue
闭包中更新 @State
属性:
@State var returnValues = [Question]()
@State var results: AnyCancellable? = nil
....
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)
})
}