gpt4 book ai didi

swift - 将响应式(Reactive) Cocoa SignalProducer 转换为枚举

转载 作者:行者123 更新时间:2023-11-30 13:17:15 25 4
gpt4 key购买 nike

我正在尝试将 API SignalProducers 转换为枚举,以便获得“正在加载”、“失败”和“已加载”状态。枚举是:

enum DataLoadState<DataType>{
case Loading
case Failed
case Loaded(DataType)
}

为此,我将 SignalProducer 转换为 NoError 生成器,并从加载状态开始:

extension SignalProducerType{
func materializeToLoadState() -> SignalProducer<DataLoadState<Value>,NoError>{
let producer = self
.map(DataLoadState.Loaded)
.startWithValue(DataLoadState.Loading)

return producer.ignoreErrors(replacementValue:DataLoadState<Value>.Failed)
}
}

extension SignalProducerType {

func startWithValue(value:Value)->SignalProducer<Value,Error>{
return SignalProducer(value:value).concat(self.producer)
}

public func ignoreErrors(replacementValue replacementValue: Self.Value? = nil) -> SignalProducer<Self.Value, NoError> {
return self.flatMapError { error in
return replacementValue.map(SignalProducer.init) ?? .empty
}
}
}

它有效,但我不想忽略错误,而是想将其包含在失败的情况中:

enum DataLoadState<DataType>{
case Loading
case Failed(APIError?)
case Loaded(DataType)
}

关于如何使用 flatMapError (如在ignoreError中)的任何想法,以便将错误作为 DataLoadState.Failed(error) 触发而不是被忽略?当错误不显示时,错误可能为零。这可能吗?

最佳答案

好的,修复它只需:

producer.flatMapError { error in SignalProducer(value:.Failed(error as? APIError)) }

关于swift - 将响应式(Reactive) Cocoa SignalProducer 转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38097958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com