Data binding

seocho·2022년 9월 19일
0

iOS

목록 보기
16/24

View Model과 View Controller 간의 데이터 변경에 대해 알려줄 수 있는 방법

종류

Observables

class Observable<T> {
    private var listener: ((T) -> Void)?
    
    var value: T {
        didSet { // 값이 변한 다음에 실행
            listener?(value)
        }
    }
    
    init(_ value: T) {
        self.value = value
    }
    
    func bind(_ closure: @escaping (T) -> Void) { // 값을 연결하는 부분
        closure(value)
        listener = closure
    }
}
ViewModel


var title: Observable<String> = Observable("Welcome")

// 이런식으로 view model에서 지정

ViewController

viewModel.title.bind { value in
            DispatchQueue.main.async {
                self.titleLabel.text = value
            }
        }

// 이런식으로 등록할 이벤트를 클로저로 구현

Combine

@Published var employees: [Employee] = []

// ViewModel에서 바인딩할 변수를 Published로 감싸준다.
private var cancellables: Set<AnyCancellable> = []

private func bindViewModel { // B.
        viewModel.$employees.sink { [weak self] _ in
            self?.showTableView()
        }.store(in: &cancellables)
    }
    
ViewController에서 binding을 진행하는데, 여기서 AnyCancellable은 뭐지?

Cancellable

현재 이벤트 및 작업의 취소에 대해 지원하는 프로토콜

  • cancel() 메서드를 호출함으로 리소스에 대해 해제
    => 타이머, 네트워크 엑세스, 디스크I/O와 같은 사이드 이펙트 발생을 막아준다.
profile
iOS 개린이

0개의 댓글