[RxSwift] Transforming 연산자

jinny·2022년 10월 16일
0

RxSwift

목록 보기
7/10
post-thumbnail

ToArray


📚 개념

  • 각 elements를 하나의 배열에 담는다.

✏️ 예시) ToArray 사용방법

// 실행코드
let disposeBag = DisposeBag()

Observable.of(1, 2, 3, 4, 5, 6)
    .toArray()
    .subscribe({
        print($0)
    }).disposed(by: disposeBag)
// 결과
success([1, 2, 3, 4, 5, 6])

🏷 참고 사이트



Map


📚 개념

  • 각 elements에 어떤 연산을 하고, 해당 연산의 결과를 return한다.

✏️ 예시) Map 사용방법

// 실행코드
let disposeBag = DisposeBag()

Observable.of(1, 2, 3, 4, 5, 6)
    .map { return $0 * 2 }
    .subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)
// 결과
2
4
6
8
10
12

🏷 참고 사이트



FlatMap


📚 개념

  • struct와 같은 자료형에서 자료형 전체를 subscribe 하는게 아니라, 특정 멤버에 대해 subscribe 한다.
  • accept() 시, onNext()가 자동으로 호출된다.
  • 2차원 배열을 1차원 배열로 return한다. (평평한 배열 return)

✏️ 예시) FlatMap 사용방법

// 실행코드
let disposeBag = DisposeBag()

struct Student {
    var score: BehaviorRelay<Int> // subscribe 가능한 자료형
}

let Harray = Student(score: BehaviorRelay(value: 90))
let Jinny = Student(score: BehaviorRelay(value: 70))

let student = PublishSubject<Student>()

student.asObservable()
    .flatMap() { $0.score.asObservable() }
    .subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)

print("--Harray--")
student.onNext(Harray)
Harray.score.accept(100)

print("--Jinny--")
student.onNext(Jinny)
Jinny.score.accept(99)

print("--Harry_again--") /* student.onNext(Jinny) 호출 후에도 
							Harray의 값이 변경되면 onNext() 자동 호출 */
Harray.score.accept(95)
// 결과
--Harray--
90
100
--Jinny--
70
99
--Harry_again--
95

🏷 참고 사이트



FlatMapLatest


📚 개념

  • FlatMap과 유사하지만, onNext() 한번의 호출 이후 값이 변경되었을 시에 onNext()가 자동으로 호출되지 않는 차이점이 있다.

✏️ 예시) FlatMapLatest 사용방법

// 실행코드
let disposeBag = DisposeBag()

struct Student {
    var score: BehaviorRelay<Int> // subscribe 가능한 자료형
}

let Harray = Student(score: BehaviorRelay(value: 90))
let Jinny = Student(score: BehaviorRelay(value: 70))

let student = PublishSubject<Student>()

student.asObservable()
    .flatMapLatest() { $0.score.asObservable() }
    .subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)

print("--Harry--")
student.onNext(Harray)
Harray.score.accept(100)

print("--Jinny--")
student.onNext(Jinny)
Jinny.score.accept(99)

print("--Harry_again--")
Harray.score.accept(0)
student.onNext(Harray)
// 결과
--Harry--
90
100
--Jinny--
70
99
--Harry_again--

🏷 참고 사이트



💥 공부를 위한 정리글이기 때문에 잘못된 부분이 있을 수 있습니다. 💥

profile
우당탕탕 지니

0개의 댓글