RxCocoa

Eli·2021년 2월 15일
1

RxSwift

목록 보기
4/5
post-thumbnail

RxCoocoa는 "UIKit 및 Cocoa 개발을 지원하는 Rx 클래스, RxSwift의 확장" 정도로 생각하면 좋겠다.

아래 간단한 두개의 예시로 Rx로 UI를 더 간결하게 처리 할 수 있는 기능들을 보여주고자 한다.

UIButton

//기존 우리가 UIButton에 touchUpInside이벤트를 처리하는 방법
@objc func onClickButton(_ sender: UIButton) {
		//버튼 엑션	
}

self.someButton.addTarget(
	self, 
	action:#selector(self.onClickButton(:_), 
	forControlEvents: .touchUpInside
)

//RxCocoa를 사용한 처리방법
self.someButton.rx.tap
		.bind { _ in
				//버튼 액션
		}.disposed(by: self.disposeBag)

이전과 비교해 항상 직관적이지 못했던 addTarget이라는 과정을 setUp이나 viewDidLoad 등에서 해주었다.

보다 코드를 더 잘 분리할 수 있는 도움을 주지 않을까 생각하게 된다.

UITableView

//기존의 UITableView
extension ViewController: UITableViewDataSource {
//데이터소스 구현
}

extension ViewController: UITableViewDelegate {
//델리게이트 구현
}

func viewDidLoad() {
		self.tableView.delegate = self
		self.tableView.dataSource = self
}

Rx를 사용하지 않는 UITableView에서는 항상 Delegation pattern으로 구현을 해주어야 했다.

RxCocoa에서 지원하는 bind 기능을 통해서 아래와 같이도 구현할 수 있게 된다.

DataSource의 기능을 대체할 수 있다.

let cities = Observable.of(["Lisbon", "Copenhagen", "London", "Madrid", "Vienna"]) 

cities.bind(to: tableView.rx.items) { (tableView, index, element) in 
	let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") 
	cell.textLabel?.text = element 

	return cell
}.disposed(by: disposeBag) 
profile
애플을 좋아한다. 그래서 iOS 개발을 한다. @Kurly

0개의 댓글