ReactiveSwift error after update to Xcode12( Error msg: Cannot convert value of type 'Disposable?' to closure result type 'Void')

214 views Asked by At

The following func runs well before I update to Xcode12, I'm new to ReactiveSwift and I don't know how to fix this issue, thanks for you help!

enter image description here

Error message: Cannot convert value of type 'Disposable?' to closure result type 'Void'

 public func testFunc(input: Signal<Value, Never>.Event = .completed) -> Signal<Value, Never> {

    return Signal<Value, Never> { observer, lifetime in
        return self.signal.observe { event in
            switch event {
            case .value(let value):
                observer.send(value: value)
            case .failed(_):
                observer.send(input)
            }
        }
    }
}
1

There are 1 answers

2
jjoelson On BEST ANSWER

This was a change made in newer ReactiveSwift versions. Instead of returning a disposable, you should add it to the lifetime passed to the closure:

public func testFunc(input: Signal<Value, Never>.Event = .completed) -> Signal<Value, Never> {

    return Signal<Value, Never> { observer, lifetime in
        lifetime += self.signal.observe { event in
            switch event {
            case .value(let value):
                observer.send(value: value)
            case .failed(_):
                observer.send(input)
            }
        }
    }
}

It seems like there are also some missing cases in that switch statement though.