I am trying to find out if network request processing can be suitable for my needs using ReactiveSwift and RAC5.
Under topics Migrating from RACSignal to ReactiveSwift or RAC5 I was told that this can be done using SignalProducer, but digging into it did not produce the expected results
So, I would like to:
1. Each time the text changes in the text field of the send request (search by keyword).
2. As soon as the user closes the current ViewController, the current request should be canceled automatically
3. Be able to cancel the request after changing the keyword
That's what i
self.textField.reactive.continuousTextValues.skipNil().filter({ (value) -> Bool in
return value.characters.count > 0
}).observeValues { [unowned self] (value) in
self.fetchSignalDisposable?.dispose()
self.fetchSignal = self.producerFor(keyword: value).on(started: {
print("started")
}, failed: { (error) in
print("error")
}, completed: {
print("completed")
}, value: { [unowned self] (items) in
print("value")
self.items.append(contentsOf: items)
self.tableView.reloadData()
})
self.fetchSignalDisposable = self.fetchSignal!.start()
}
And here is the manufacturer initializer
return SignalProducer<Any, NSError> { (observer, disposable) in
let task: URLSessionDataTask? = NetworkClient.fetchRequestWith(uri: "test", parameters: ["keyword" : keyword], success: { response in
observer.send(value: response)
observer.sendCompleted()
}, failure: { error in
observer.send(error: error)
observer.sendCompleted()
})
disposable += {
task?.cancel()
}
}
:
1. " ", , , , .
/ :
1. VC ( ), watchValue . .skipRepeats(), , , . , , VC
2. completed , send(error: error)
3. - , VC, , . , , viewController signalProducer. self.fetchSignalDisposable?.dispose() deinit VC . - value, " "
:
1. - "" ,
2. textFields , VC
3. , VC
P.S.: , , , !