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
- collectionview
- ios
- HIG
- 스위프트
- swiftUI
- UICollectionView
- 리펙터링
- Protocol
- combine
- rxswift
- MVVM
- 클린 코드
- 리펙토링
- tableView
- RxCocoa
- Human interface guide
- Clean Code
- Xcode
- Observable
- clean architecture
- Refactoring
- 리팩토링
- swift documentation
- UITextView
- uitableview
- map
- ribs
- 애니메이션
- uiscrollview
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[RxCocoa] 1. 맛보기 본문
1. RxCocoa란?
다양한 protocol을 extension한 것들과 UIKit을 위한 rx영역을 제공하는 프레임워크
RxCocoa는 단방향성을 갖음
- Producer는 값을 생성하고, Consumer는 값을 처리
* 이벤트를 발생하는 producer가 처리하는 consumer에게 bind(to:)시키는 것이 중요
2. 사용
1) RxCocoa없이 생성
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
// 테이블뷰 데이터
let items = ["1", "2", "3", "4", "5"]
// 섹션내 셀의 수를 지정한다.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
// 각 셀을 구성한다.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = items[indexPath.row]
return cell
}
// 셀을 클릭했을 때 데이터 값을 출력한다.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("\(items[indexPath.row])")
}
override func viewDidLoad() {
super.viewDidLoad()
// 테이블 뷰의 데이터 소스와 델리게이트를 설정한다.
tableView.delegate = self
tableView.dataSource = self
}
}
2) RxCocoa 사용
- 핵심은 bind(to:), tableView.rx.items(cellIdentifier:cellType:)
import UIKit
import RxSwift
import RxCocoa
class ViewController : UIViewController {
@IBOutlet weak var tableView: UITableView!
var disposeBag = DisposeBag()
let items = ["1", "2", "3", "4", "5"]
override func viewDidLoad() {
super.viewDidLoad()
let items = Observable.just(
(1...5).map { "\($0)" }
)
// 각 셀을 구성한다.
items
.bind(to: tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)) { (row, element, cell) in
cell.textLabel?.text = "\(element)"
}
.disposed(by: disposeBag)
// 셀을 클릭했을 때 데이터 값을 출력한다.
tableView.rx
.modelSelected(String.self)
.subscribe(onNext: { item in
print("\(item)")
})
.disposed(by: disposeBag)
}
}
*참조
'RxSwift > RxCocoa' 카테고리의 다른 글
[RxCocoa] 5. Traits (ControlProperty, ControlEvent, Driver) (0) | 2020.09.30 |
---|---|
[RxCocoa] 4. Delegate Proxy - Delegate를 rx로 바꾸어 사용하기 (0) | 2020.08.05 |
[RxCocoa] 3. custom extensions (0) | 2020.08.05 |
[RxCocoa] 2. 기본 개념 (0) | 2020.07.06 |
Comments