반응형
Sequence Operator
Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다.
그 중 배열로 이루어진 Output을 변환하는 Operator(Sequence Operator)를 정리해보겠다.
min and max
Example
let publisher = [1,-45,3,45,100].publisher
publisher
.max()
.sink {
print($0)
}
Output
100
- publisher가 finish될 때까지 기다리고 이 후 연산을 처리한다.
- 데이터 중 max(min)값을 반환한다.
first and last
Example
let publisher = ["A","B","C","D"].publisher
publisher.first().sink {
print($0)
}
publisher.first(where: { "Cat".contains($0) }).sink {
print($0)
}
print("Last Publisher")
publisher.last().sink {
print($0)
}
Output
A
C
Last Publisher
D
- 첫번째(frist) 혹은 마지막(last) 데이터를 방출한다.
- first는 조건을 만족하면 바로 방출되고, last는 finish 이후에 방출된다.
output
Example
let publisher = ["A","B","C","D"].publisher
publisher.output(at: 2).sink {
print($0)
}
print("Output(in)")
publisher.output(in: (0...2)).sink {
print($0)
}
Output
C
Output(in)
A
B
C
- 특정 index의 데이터를 방출하도록 한다.
- at을 활용해 한개를, in을 활용해 여러개를 방출할 수 있다.
count
Example
let publisher = ["A","B","C","D"].publisher
let publisher1 = PassthroughtSubject<Int, Never>()
publisher.count()
.sink {
print($0)
}
publisher.count()
.sink {
print($0)
}
publisher1.send(10)
publisher1.send(10)
publisher1.send(10)
publisher1.send(10)
publisher1.send(completion: .finished)
Output
4
4
- publisher가 finish될 때까지 기다리고 이 후 연산을 처리한다.
- 데이터의 개수를 방출한다.
contains
Example
let publisher = ["A","B","C","D"].publisher
publisher.contains("F").sink {
print($0)
}
Output
false
- 주어진 조건을 만족하는 값이 존재하는지 Bool값으로 방출한다.
allSatisfy
Example
let publisher = [12,2,14,4,6,8].publisher
publisher.allSatisfy { $0 % 2 == 0 }.sink { allEven in
print(allEven)
}
Output
true
- 주어진 조건을 모두 만족하는지 Bool값으로 방출한다.
reduce
Example
let publisher = [1,2,3,4,5,6].publisher
publisher.reduce(0) { accumulator, value in
print("accumulator: \(accumulator) and the value is \(value)")
return accumulator + value
}.sink {
print($0)
}
Output
accumulator: 0 and the value is 1
accumulator: 1 and the value is 2
accumulator: 3 and the value is 3
accumulator: 6 and the value is 4
accumulator: 10 and the value is 5
accumulator: 15 and the value is 6
21
- upstream의 값을 누적해서 finish되었을 때 방출한다.
- scan과의 차이점 : scan은 값을 매번 방출하는 반면, reduce는 누적된 값을 한번에 방출한다.
반응형
'🍎 Apple > Combine & Rx' 카테고리의 다른 글
[Combine] share, multicast (0) | 2022.01.13 |
---|---|
[Combine] timer (by Runloop, Timer Class, DispatchQueue) (2) | 2022.01.13 |
[Combine] Operator (3): Combining Operator (0) | 2022.01.12 |
[Combine] Operator (2): Filtering Operator (0) | 2022.01.12 |
[Combine] Operator (1): Transforming Operator (0) | 2022.01.10 |