collect()
completion이 방출하기 전까지 모든 이벤트를 어레이로 묶어서 리턴함.
let numbers = (0...10)
cancellable = numbers.publisher
.collect()
.sink { print("\\($0)") }
//// Prints: "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
let numbers = (0...10)
cancellable = numbers.publisher
.collect(5)
.sink { print("\\($0), terminator: " "") }
// Prints "[0, 1, 2, 3, 4] [5, 6, 7, 8, 9] [10] "
//지정한 개수별로 묶어서
collect(_ strategy: Pulishers.TimeGroupingStrategy<S>, option: S.SchedulerOptions? = nil)
타이머를 collection 해줌.
let sub = Timer.publish(every: 1, on: .main, in: .default)
.autoconnect()
.collect(.byTime(RunLoop.main, .seconds(5)))
.sink { print("\\($0)", terminator: "\\n\\n") }
// Prints: "[2020-01-24 00:54:46 +0000, 2020-01-24 00:54:47 +0000,
// 2020-01-24 00:54:48 +0000, 2020-01-24 00:54:49 +0000,
// 2020-01-24 00:54:50 +0000]"
ignoreOutout()
struct NoZeroValuesAllowedError: Error {}
let numbers = [1, 2, 3, 4, 5, 0, 6, 7, 8, 9]
cancellable = numbers.publisher
.tryFilter({ anInt in
guard anInt != 0 else { throw NoZeroValuesAllowedError() }
return anInt < 20
})
.ignoreOutput()
.sink(receiveCompletion: {print("completion: \\($0)")},
receiveValue: {print("value \\($0)")})
reduect(initalResult, nextPartialResult) ,tryReduce()
let numbers = (0...10)
cancellable = numbers.publisher
.reduce(0, { accum, next in accum + next })
.sink { print("\\($0)") }
// Prints: "55"