RxSwift가 무엇인지부터 시작해서 지금까지 Observable에 대해서 알아보았다.
이번에는 Operator 중에서도 Filtering Operator에 대해서 알아볼 것이다.
Next 이벤트를 통해 받아온 값을 필터링할 수 있는 연산자이다. Array의 filter와 거의 동일한 역할을 한다. 그럼 직접 코드를 작성하며 알아보자.
let dispoaseBag = DisposeBag()
let 방해금지 = PublishSubject<String>()
방해금지
.ignoreElements()
.subscribe { _ in
print("🌙")
}
.disposed(by: dispoaseBag)
방해금지.onNext("카톡알림")
방해금지.onNext("카톡알림")
방해금지.onNext("전화")
방해금지.onCompleted()
// print
// 🌙
let filtering = PublishSubject<String>()
filtering
.element(at: 2)
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
filtering.onNext("0") // index0
filtering.onNext("1") // index1
filtering.onNext("2") // index2
filtering.onNext("3") // index3
// print
// 2
Observable.of(1,2,3,4,5,6,7,8)
.filter { $0 % 2 == 0 }
.subscribe (onNext:{
print($0)
})
.disposed(by: dispoaseBag)
// print
// 2
// 4
// 6
// 8
Observable.of(1,2,3,4,5,6)
.skip(5)
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
// print
// 6
Observable.of(1,2,3,4,5,6,7,8)
.skip(while: {
$0 != 6
})
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
// print
// 6
// 7
// 8
let person = PublishSubject<String>()
let open = PublishSubject<String>()
person
.skip(until: open)
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
person.onNext("1")
person.onNext("2")
open.onNext("Open the Door!")
person.onNext("3")
// print
// 3
Observable.of(1,2,3,4,5)
.take(3)
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
// print
// 1
// 2
// 3
Observable.of(1,2,3,4,5)
.take(while: {
$0 != 3
})
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
// print
// 1
// 2
Observable.of(1,2,3,4,5)
.enumerated()
.takeWhile {
$0.index < 3
}
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
// print
// (index: 0, element: 1)
// (index: 1, element: 2)
// (index: 2, element: 3)
let student = PublishSubject<String>()
let close = PublishSubject<String>()
student
.take(until: close)
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
student.onNext("1")
student.onNext("2")
close.onNext("Close!")
student.onNext("3")
// print
// 1
// 2
Observable.of("❤️","❤️","💛","💛","💛","💛","💙","💙","💙","❤️","💜","💜")
.distinctUntilChanged()
.subscribe(onNext: {
print($0)
})
.disposed(by: dispoaseBag)
// print
// ❤️
// 💛
// 💙
// ❤️
// 💜
이렇게 다양한 Filtering Operator 연산자들을 알아보았다.
아마 실제 구현할 때 이 연산자들을 잘 사용해서 더 간결하고 효율적인 코드를 작성할 수 있지 않을까 싶다.
다음에는 Transforming Operator에 대해서 알아보자.