Sequence Operators

이세진·2022년 9월 20일
0

iOS

목록 보기
42/46
post-custom-banner

min and max


let publisher = [1,-45,3,45,100].publisher

publisher
    .min()
    .sink {
        print($0)
    }

publisher
    .max()
    .sink {
        print($0)
    }

// 출력값
-45
100

minmax는 의미대로 sequence에서 가장 작은 값과 큰 값을 반환한다.

first and last


let publisher = ["A", "B", "C", "D"].publisher

publisher
    .first()
    .sink {
        print($0)
    }

publisher
    .last(where: { "Blue".contains($0) })
    .sink {
        print($0)
    }

// 출력값
A
B

firstlast는 의미대로 sequence에서 가장 첫번째 값과 마지막 값을 반환한다.

이 때, where 파라미터에 조건을 넣어서 해당 조건을 만족하는 first 또는 last 값을 반환하도록 할 수 있다.

output


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로 원한는 위치에 있는 값들을 얻을 수 있다.

count


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의 수를 반환한다.

contains


let publisher = ["A", "B", "C", "D"].publisher

publisher.contains("C")
    .sink {
        print($0)
    }

// 출력값
true

countains는 sequence에 특정 값의 존재 여부에 따라 Bool 값을 반환한다.

allSatisfy


let publisher = [1,2,3,4,5,6,7].publisher

publisher
    .allSatisfy {
        $0 % 2 == 0
    }.sink {
        print($0)
    }

// 출력값
false

allSatisfy는 클로저 안의 조건문을 sequence의 모든 element들이 충족할 때만 true를 반환한다.

reduce


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

profile
나중은 결코 오지 않는다.
post-custom-banner

0개의 댓글