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까지의 합을 저장하고 있음을 확인할 수 있다.