반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 문자열
- 웹뷰
- Apple
- SwiftLint
- SwiftUI
- subscript
- Swift
- 다크모드
- autolayout
- 라이트모드
- ios
- NavigationLink
- Android
- Observable
- UIButton
- Java
- remote config
- UITabBarController
- WebView
- Realtime Database
- string
- swipe
- Alamofire
- UIScrollView
- LazyHStack
- dictionary
- RxSwift
- gcd
- github
- Firebase
Archives
- Today
- Total
점진적 과부하 개발 블로그
RxSwift Transforming Operator 본문
반응형
RxSwift Transforming Operator
toArray
- Observable에 독립적인 요소들을 Array로 넣어준다.
print("-----toArray-----") // Observable에 독립적인 요소들을 Array로 넣어준다.
Observable.of("A", "B", "C")
.toArray()
.subscribe(onSuccess: {
print($0)
})
.disposed(by: disposeBag)
map
- Swift의 map과 같다.
print("-----map-----") // Swift에 map과 같다.
Observable.of(Date())
.map { date -> String in
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "ko_KR")
return dateFormatter.string(from: date)
}
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
flatMap
print("-----flatMap-----") //
protocol 선수 {
var 점수: BehaviorSubject<Int> { get }
}
struct 양궁선수: 선수 {
var 점수: BehaviorSubject<Int>
}
let 한국국가대표 = 양궁선수(점수: BehaviorSubject<Int>(value: 10))
let 일본국가대표 = 양궁선수(점수: BehaviorSubject<Int>(value: 9))
let 올림픽경기 = PublishSubject<선수>()
올림픽경기
.flatMap { 선수 in
선수.점수
}
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
올림픽경기.onNext(한국국가대표)
한국국가대표.점수.onNext(10)
올림픽경기.onNext(일본국가대표)
한국국가대표.점수.onNext(10)
일본국가대표.점수.onNext(8)
flatMapLatest
- Observable Sequence의 각 요소들을 Observable Sequence들의 새로운 순서로 투영을 한 다음 Sequence 중에 가장 최근에 Sequence에서만 값을 생성한다.
print("-----flatMapLatest-----") // Latest 가장 최신의 값을 확인하고 싶을 때 사용한다.
struct 높이뛰기선수: 선수 {
var 점수: BehaviorSubject<Int>
}
let 서울 = 높이뛰기선수(점수: BehaviorSubject<Int>(value: 7))
let 제주 = 높이뛰기선수(점수: BehaviorSubject<Int>(value: 6))
let 전국체전 = PublishSubject<선수>()
전국체전
.flatMapLatest { 선수 in
선수.점수
}
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
전국체전.onNext(서울)
서울.점수.onNext(9)
전국체전.onNext(제주)
서울.점수.onNext(10)
제주.점수.onNext(8)
materialize and dematerialize
print("-----materialize and dematerialize-----") //
enum 반칙: Error {
case 부정출발
}
struct 달리기선수: 선수 {
var 점수: BehaviorSubject<Int>
}
let 김토끼 = 달리기선수(점수: BehaviorSubject<Int>(value: 0))
let 박치타 = 달리기선수(점수: BehaviorSubject<Int>(value: 1))
let 달리기100M = BehaviorSubject<선수>(value: 김토끼)
달리기100M
.flatMapLatest { 선수 in
선수.점수
.materialize() // 이벤트들을 함께 받을수 있다.
}
.filter {
guard let error = $0.error else {
return true
}
print(error)
return false
}
.dematerialize() // 다시 원래의 상태로 되돌려준다.
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
김토끼.점수.onNext(1)
김토끼.점수.onError(반칙.부정출발)
김토끼.점수.onNext(2)
달리기100M.onNext(박치타)
print("-----전화번호 11자리-----")
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)
.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(10)
input.onNext(0)
input.onNext(nil)
input.onNext(1)
input.onNext(0)
input.onNext(1)
input.onNext(2)
input.onNext(nil)
input.onNext(3)
input.onNext(4)
input.onNext(1)
input.onNext(2)
input.onNext(3)
input.onNext(4)
반응형
'RxSwift' 카테고리의 다른 글
RxSwift TimeBased Operator (0) | 2022.05.22 |
---|---|
RxSwift Combining Operator (0) | 2022.05.20 |
RxSwift Filtering Operator (0) | 2022.05.17 |
RxSwift Subject 알아보기 (0) | 2022.05.16 |
RxSwift Single, Maybe, Completable 알아보기 (0) | 2022.05.15 |