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 |
Tags
- 리팩토링
- tableView
- Xcode
- Refactoring
- SWIFT
- UICollectionView
- uitableview
- ribs
- 리펙터링
- HIG
- clean architecture
- Human interface guide
- 클린 코드
- ios
- collectionview
- 스위프트
- combine
- RxCocoa
- swiftUI
- map
- Clean Code
- UITextView
- 리펙토링
- swift documentation
- rxswift
- 애니메이션
- Protocol
- MVVM
- uiscrollview
- Observable
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[RxSwift] 10. share Operators 본문
Share() 연산자는 자원을 공통으로 사용 할 수 있게끔 하는 개념
1. Share을 쓰는 이유
1) MVVM설계
// ViewModel 정의
class SomeViewModel {
let result = userTappedButton
.flatMapLatest {apiService.rx.getFriend() }
name = result.map {$0.name}
phone = result.map {$0.phone}
}
// ViewController에서 ViewModel과 UI연결
class {
...
viewModel.name
.bind(to: lblName.rx.text) // UI와 ViewModel간의 연결
.disposed(by: bag)
viewModel.phone
.bind(to: lblPhone.rx.text)
.disposed(by: bag)
}
2) 문제점
subscriber1(name), subscriber2(phone)는 각각 각자의 stream을 사용하는 것
아래와같이 map연산자를 사용한다면, 더욱더 추가적인 2개의 독립 자원과 스트림이 필요
viewModel.name
.map {$0.isEmpty}
.bind(to: lblName.rx.text) // UI와 ViewModel간의 연결
.disposed(by: bag)
viewModel.phone
.map {$0.isEmpty}
.bind(to: lblPhone.rx.text)
.disposed(by: bag)
2. share() 연산자 사용하여 해결
share() 사용 -> 하나의 stream을 공통으로 사용
class SomeViewModel{
let result = userTappedButton
.flatMapLatest {apiService.rx.getFriend()}
.share() // subscriber들에게 스트림의 자원들을 공유
name = result.map{$0.name}
phone = result.map{$0.phone}
}
* 참고 : medium.com/gett-engineering/rxswift-share-ing-is-caring-341557714a2d
'RxSwift > RxSwift 기본' 카테고리의 다른 글
[RxSwift] 12. Scheduler (0) | 2020.06.25 |
---|---|
[RxSwift] 11. Time-Based Operators (delay, timeout) (0) | 2020.06.24 |
[RxSwift] 9. Combining Operators (0) | 2020.06.05 |
[RxSwift] 8. Transforming Operators 실전(RESTful API) (0) | 2020.06.04 |
[RxSwift] 7.Transforming Operators (0) | 2020.06.01 |
Comments