Мое приложение имеет область состояния вверху, которая показывает информацию о ходе работы (аналогичную Xcode и iTunes). Я хочу обновить его, введя побочные эффекты в поток событий, используя закрытие, которое преобразует значение потока в значение ProgressUpdate. Я использую расширение на SignalProducer, поэтому любой производитель сигналов в моем приложении может обновлять область состояния приложения (есть намного больше, чтобы задействовать сразу несколько сигналов, но это не влияет на эту проблему).генерирует побочный эффект в SignalProducer
Я основываю его на SignalProducer's (начало :, начато :, ...). Это требует последней быстрой версии 3.1 beta, которая позволяет ограничить тип ошибки, но это прямо из игровой площадки.
import ReactiveSwift
struct Rc2Error: Error {
}
struct ProgressUpdate {
let message: String
let value: Double = -1
}
class MacAppStatus {
fileprivate func process(event: (Event<ProgressUpdate, Rc2Error>) -> Void)
{
//update UI based on the event
}
}
extension SignalProducer where Error == Rc2Error {
func updateProgress<Value>(status: MacAppStatus, converter: @escaping (Value) -> ProgressUpdate) -> SignalProducer<Value, Error>
{
return SignalProducer<Value, Error> { observer, compositeDisposable in
self.startWithSignal { signal, disposable in
compositeDisposable += disposable
compositeDisposable += signal
.on(event: { (orignal) in
switch original {
case .completed:
status.process(Event<ProgressUpdate, Rc2Error>.completed)
case .interrupted:
status.process(Event<ProgressUpdate, Rc2Error>.interrupted)
case .failed(let err):
status.process(Event<ProgressUpdate, Rc2Error>.failed(err))
case .value(let val):
status.process(Event<ProgressUpdate, Rc2Error>.value(converter(val)))
}
})
.observe(observer)
}
}
}
}
`` `
Последняя строка .observe(observer)
выдает ошибку:
error: cannot convert value of type 'Observer<Value, Rc2Error>' to expected argument type 'Observer<_, Rc2Error>'
Любые идеи, почему это преобразование терпит неудачу? Предложения по-другому для этого?
Typo? '.on (event: {(orignal)' вместо 'original' –
, что плюс несколько других опечаток –