Getting started with Apple Combine
let credentials = Publishers .CombineLatest($username, $password) { ($0, $1) } .share() credentials .map { uname, pass in uname.count >= 4 && pass.count >= 4 } .prepend(false) // initial state .assign(to: \.isEnabled, on: loginButton) .cancelled(by: cancellableBag) // More in the example...
Timer.publish(every: 0.1, on: .main, in: .default) .autoconnect() .scan(0, { (acc, _ ) in return acc + 1 }) .map { $0.timeInterval } .replaceError(with: "") .eraseToAnyPublisher() .assign(to: \.currentTime, on: self) .cancelled(by: cancellableBag) // More in the example...
$query .throttle(for: 0.5, scheduler: .main, latest: true) .removeDuplicates() .map { query in return API().search(with: query) .retry(3) .eraseToAnyPublisher() } // More in the example...
$text .throttle(for: 0.5, scheduler: .main, latest: true) .map { text in API().search(with: text) .map { isAvailable in isAvailable ? "Name available" : "Name already taken" } .prepend("Checking...") } .switchToLatest() // More in the example...
MIT.
The Apple logo and the Combine framework are property of Apple Inc.