combineの簡単な例
PassthroughSubject と CurrentValueSubject
を使ってみた。おおよそRxSwift的に使えると思った。
func test() -> Void { let pub = PassthroughSubject<Int, Error>() _ = pub .sink(receiveCompletion: { _ in }) { value in print("new val -> \(value)") } pub.send(10) pub.send(100) pub.send(completion: .finished) } //test() func test2() -> Void { let pub = CurrentValueSubject<Int, Error>(100) _ = pub.sink(receiveCompletion: {_ in }, receiveValue: { (value) in print("new val -> \(value)") }) pub.send(100) pub.send(1000) pub.send(completion: .finished) } //test2() func test3() -> Void { let pub = [1,2,3,4,5,6,7,8,9,10].publisher _ = pub.sink(receiveValue: { value in print("new val -> \(value)") }) } //test3() func test4() -> Void { let pub = [1,2,3,4,5].publisher let pub2 = pub.map { (x) -> Int in return x*2 } _ = pub2.sink(receiveValue: { value in print("new val -> \(value)") }) } //test4() /* new val -> (4, 5) new val -> (4, 6) new val -> (4, 7) new val -> (4, 8) */ func test5() -> Void { let pub = [1,2,3,4].publisher let pub2 = [5,6,7,8].publisher let pub3 = pub.combineLatest(pub2) _ = pub3.sink(receiveValue: { value in print("new val -> \(value)") }) } //test5() /* new val -> (1, 5) new val -> (2, 6) new val -> (3, 7) new val -> (4, 8) */ func test6() -> Void { let pub = [1,2,3,4].publisher let pub2 = [5,6,7,8].publisher let pub3 = pub.zip(pub2) _ = pub3.sink(receiveValue: { value in print("new val -> \(value)") }) } //test6() func test7() -> Void { let sub = PassthroughSubject<Int, Error>() _ = sub.sink(receiveCompletion: { comp in print("\(comp)") }, receiveValue: { (value) in print("new val -> \(value)") }) sub.send(100) sub.send(120) sub.send(completion: .failure(NSError(domain: "Error!", code: 0, userInfo: nil))) } test7()