Skip to main content

range?

range는 for문과 같이 Observable에서도 요소를 단순히 연속적으로 반복해서 방출시키는 연산자

마블다이어그램을 보시면 nm을 입력하였을 때 n에서 정해진 수부터 사용자가 m으로 정한 수까지 연속적으로 반복 방출하는 것을 볼 수 있습니다.

사용방법

아래는 range의 가장 기본적인 형태입니다:

Observable.range(start: 0, count: 10)

range를 호출하려면 startcount라는 파라미터가 있습니다. 이때 start가 생성할 정수 시퀀스의 시작 값이고 count 값이 생성할 정수의 개수입니다.

예를 들어, Observable.range(start: 0, count: 10) 는 0부터 시작하여 10개의 정수를 순차적으로 방출하는 Observable을 반환합니다.

방출되는 값은 0, 1, 2, ..., 9가 됩니다. 쉽게 생각해서 start..<count로 해석하면됩니다.

아래 코드는 위 설명을 바탕으로 코드화 시킨 것입니다:

Observable.range(start: 0, count: 10).subscribe(onNext: { element in
print(element)
})

// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9

단순 반복 요소 방출하는 Observable를 만들고 싶다면 range를 사용하면 될 것 같습니다.

여기서 추가적으로 Wallaby님에게 배운건데 fromrange를 동일하게 사용할 수 있다고 합니다. 아래는 그 예제의 코드입니다:

let fromObservable = Observable.from(0..<10)

rangeObservable.subscribe(onNext: { element in
print(element)
})

이런식으로 사용하게 된다면 from(0..<10)range(start: 0, count: 10) 과 동일한 효과를 보실 수 있습니다. 스타일 차이입니다.

실습 예제

range로 구구단을 만들어봅시다.

  • 구구단 예제
    Observable.range(start: 1, count: 9)
    .subscribe(onNext: {
    print("2 * \($0) = \(2*$0)")
    })