Transforming Operator
1. toArray()
- 배열로 만들어줌과 동시에 single로 만듦
2. map
- swift와 동일한 기능의 map
3. flatMap
- 중첩된 Observable에서 내부의 값을 컨트롤하고 싶을 때 사용
let disposeBag = DisposeBag()
protocol 선수 {
var 점수 : BehaviorSubject<Int> { get }
}
struct 양궁선수 : 선수 {
var 점수 : BehaviorSubject<Int>
}
let 한국양궁선수 = 양궁선수(점수: BehaviorSubject<Int>(value: 10))
let 미국양궁선수 = 양궁선수(점수: BehaviorSubject<Int>(value: 8))
let 올림픽경기 = PublishSubject<선수>()
올림픽경기
.flatMap{선수 in
선수.점수
}
.subscribe(onNext:{
print($0)
})
.disposed(by: disposeBag)
print("한국양궁선수 초기값")
올림픽경기.onNext(한국양궁선수)
print("한국양궁선수 다음 값")
한국양궁선수.점수.onNext(9)
//출력
//10
//9
4. flatMapLatest
- (예를 들어) 2가지의 시퀀스를 가지고 있는 Observable에서, 새로운 sequence가 onNext 됐을 때,이전 sequence의 변경된 값은 무시한다.
- 검색 자동완성에 사용가능.
- 새로운 스트림을 만들고 동작을 수행하는 도중, 새로운 아이템이 방출되게 된다면, 이전 스트림을 dispose 하고 새롭게 들어오게 되는 아이템에 대해 스트림을 생성하여 동작.
5. materialize
- 값과 동시에 이벤트를 받을 수 있음 ( next(),error() 등 )
6. dematerialize
- 출력된 이벤트를 다시 값만 나오게 되돌려줌
전화번호 입력 코드 예시 ( 종합 연습 )
let disposeBag = DisposeBag()
let input = PublishSubject<Int?>()
let list: [Int] = [1]
input
.flatMap{
$0 == nil ? Observable.empty() : Observable.just($0)
}
.map{ $0! }
.skip(while: {$0 != 0})
.take(11) //010-6676-2789
.toArray()
.asObservable()
.map {
$0.map {"\($0)"}
}
.map { numbers in
var numberList = numbers
numberList.insert("-", at: 3)
numberList.insert("-", at: 8)
let number = numberList.reduce(" ",+)
return number
}
.subscribe(onNext:{
print($0)
})
.disposed(by: disposeBag)
input.onNext(0)
input.onNext(1)
input.onNext(0)
input.onNext(6)
input.onNext(6)
input.onNext(7)
input.onNext(6)
input.onNext(2)
input.onNext(7)
input.onNext(8)
input.onNext(9)
//010-6676-2789
Author And Source
이 문제에 관하여(Transforming Operator), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ym980118/Transforming-Operator저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)