728x90
RxSwift란?
✨ 간단하게 알아보기
Bindings
: Dispatch Queue를 이용했던 것을 bind를 이용해 자동적으로 처리
Observable
.combineLatest(
firstName.rx.text,
lastName.rx.text
) { $0 + " " + $1 }
.map { "Greetings, \\($0)" }
.bind(to: greetingLabel.rx.text)
.disposed(by: disposeBag)
재시도
ex) api 통신 실패했을때 재시도 용이
func doSomethingIncredible(forWho: String) throws -> IncredibleThing
doSomethingIncredible(“me")
.retry(3)
Delegate
: 훨씬 더 직관적으로 표현 가능
public func scrollViewDidScroll(scrollView: UIScrollView) { [weak self]
self?.leftPositionConstraint.constant = scrollView.contentOffset.x self?.leftPositionConstraint.constant = scrollView.contentOffset.x
}
self.resultsTableView.rx.contentOffset
.map { $0.x }
.bind(to: self.leftPositionConstraint.rx.constant)
비동기 API들
- Notification Center
- The delegate pattern
- Grand Central Dispatch(GCD)
- Closures
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated)
makeUI()
connectUIControls()
fetchData()
checkForChanges()
}
→ 비동기로 실행되어 내부적으로 어떻게 돌아가는지 인지하기 힘들다.
→ Rx는 이를 추적 가능하도록 해준다.
Benefits
- Composable: 조합 가능
- Reusable: 재사용 가능
- Declarative: 선언형
- Understandable and concise: 이해하기 쉽고, 간결함
- Stable: 안정적
- Less stateful
- Without leaks
✨ 구성 요소
Observable
💟 Observable<T>
- Rx 코드의 기반
- T 형태의 데이터 snapshot을 '전달' 할 수 있는 일련의 이벤트를 비동기적으로 생성하는 기능
- 하나 이상의 observers가 실시간으로 어떤 이벤트에 반응
- 세 가지 유형의 이벤트만 방출
enum Event<Element> {
case next(Element) // 1️⃣ 다음 데이터를 전달
case error(Swift.Error) // 2️⃣ 에러와 함께 이벤트를 종료시킴
case completed // 3️⃣ 성공적으로 일련의 이벤트를 종료시킴
}
- Finite Observable
Network.download(file: "<https://www>...") .subscribe(onNext: { data in //임시 파일에 데이터 추가 }, onError: { error in //사용자에게 에러 표현 }, onCompleted: { //다운로드 된 파일 사용 })
- Infinite Observable
UIDevice.rx.orientation .subscribe(onNext: { current in switch current { case .landscape: // 가로모드 배치 case .portrait: // 세로모드 배치 } })
Operator
: Observable에는 복잡한 논리를 구현하기 위한 여러 메소드로 구성됨
→ 여러 메소드들이 조합되어 하나의 구문을 이룬다.
UIDevice.rx.orientation
.filter { value in
return value != .landscape
}
.map { _ in
return "세로로만 볼거예요!"
}
.subscribe(onNext: { string in
showAlert(text: string)
})
Scheduler
: Dispatch Queue와 동일하지만 훨씬 강력하고 쓰기 쉽다.
728x90
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Transforming Operator 알아보기 (0) | 2022.10.23 |
---|---|
[RxSwift] Filtering Operator 알아보기 (1) | 2022.10.23 |
[RxSwift] Subject 알아보기 (0) | 2022.08.14 |
[RxSwift] Single, Maybe, Completable 알아보기 (0) | 2022.08.14 |
[RxSwift] Observable 알아보기 (0) | 2022.08.11 |