let publisher = [1,-45,3,45,100].publisher
publisher
.min()
.sink {
print($0)
}
publisher
.max()
.sink {
print($0)
}
// 출력값
-45
100
min
과 max
는 의미대로 sequence에서 가장 작은 값과 큰 값을 반환한다.
let publisher = ["A", "B", "C", "D"].publisher
publisher
.first()
.sink {
print($0)
}
publisher
.last(where: { "Blue".contains($0) })
.sink {
print($0)
}
// 출력값
A
B
first
와 last
는 의미대로 sequence에서 가장 첫번째 값과 마지막 값을 반환한다.
이 때, where 파라미터에 조건을 넣어서 해당 조건을 만족하는 first 또는 last 값을 반환하도록 할 수 있다.
let publisher = ["A", "B", "C", "D"].publisher
publisher
.output(at: 2)
.sink {
print($0)
}
print("---------")
publisher
.output(in: (0...2))
.sink {
print($0)
}
// 출력값
C
---------
A
B
C
output
은 sequence에서 특정 index 위치에 있는 값만을 반환한다.
ouput(in: )
을 사용하면 range로 원한는 위치에 있는 값들을 얻을 수 있다.
let publisher = ["A", "B", "C", "D"].publisher
let publisher1 = PassthroughSubject<Int, Never>()
publisher.count()
.sink {
print($0)
}
print("-------")
publisher1.count()
.sink {
print($0)
}
publisher1.send(0)
publisher1.send(1)
publisher1.send(completion: .finished)
// 출력값
4
-------
2
count
는 publisher가 completion으로 finished를 방출할 때까지의 방출된 element의 수를 반환한다.
let publisher = ["A", "B", "C", "D"].publisher
publisher.contains("C")
.sink {
print($0)
}
// 출력값
true
countains
는 sequence에 특정 값의 존재 여부에 따라 Bool 값을 반환한다.
let publisher = [1,2,3,4,5,6,7].publisher
publisher
.allSatisfy {
$0 % 2 == 0
}.sink {
print($0)
}
// 출력값
false
allSatisfy는 클로저 안의 조건문을 sequence의 모든 element들이 충족할 때만 true를 반환한다.
let publisher = [1,2,3,4,5,6].publisher
publisher
.reduce(0) { accumulator, value in
print("accumulator: \(accumulator), value: \(value)")
return accumulator + value
}
.sink {
print($0)
}
// 출력값
accumulator: 0, value: 1
accumulator: 1, value: 2
accumulator: 3, value: 3
accumulator: 6, value: 4
accumulator: 10, value: 5
accumulator: 15, value: 6
21
accumulator는 컴퓨터의 중앙처리장치에서 더하기, 빼기, 곱하기, 나누기 등의 연산을 한 결과 등을 일시적으로 저장해 두는 레지스터(누산기)를 말한다.
reduce
는 sequence의 element를 순회하면서 특정 연산을 거친 값을 반환하다. 위의 예시에서는 값들을 모두 더하는 연산을 수행하고 있다.
accumulator의 출력값을 확인해보면 이전 element까지의 합을 저장하고 있음을 확인할 수 있다.