[Swift] [Commbin] 흐름에서 Reduce () 처리를 재생하려는 경우 -> scan () 를 사용합니다!

7971 단어 Swiftcombinetech

reduce()의 복습


reduce() 수조의 수치를 합계할 때 다음과 같다.
let sum = [1, 2, 3, 4].reduce(0) { $0 + $1 }
print("sum: \(sum)") // sum: 10

이 계산 과정을 Combine의 흐름으로 재생하고 싶을 때scan()를 사용하면 간단하게 쓸 수 있다.

scan()으로 봐봐.


scan()의 사용 방법과 reduce()의 사용 방법은 매우 비슷하다.
다음은 예입니다.
var cancellables = Set<AnyCancellable>()

[1, 2, 3, 4].publisher
    .scan(0) { $0 + $1 }
    .sink {
        print("result: \($0)")
    } receiveValue: {
        print("output: \($0)")
    }
    .store(in: &cancellables)

// 出力
// output: 1 ← 0 + 1
// output: 3 ← 1 + 2
// output: 6 ← 3 + 3
// output: 10 ← 6 + 4
// result: finished
다른 예도 다음과 같다.
[1, 2, 3, 4].publisher
    .scan([]) { $0 + [$1] }
    .sink {
        print("result: \($0)")
    } receiveValue: {
        print("output: \($0)")
    }
    .store(in: &cancellables)

// 出力
// output: [1]
// output: [1, 2]
// output: [1, 2, 3]
// output: [1, 2, 3, 4]
// result: finished
이상.

좋은 웹페이지 즐겨찾기