Danny의 iOS 컨닝페이퍼
article thumbnail
반응형

1. Observable

직접 만든 Observable이

어떤식으로 동작을 관찰하고 업데이트하는지 알고 싶어서 작성했습니다.

<swift>
class Observable<T> { // 2. value가 변하면 didSet에 의해 변경된 value 값을 갖고 listener 동작을 실행합니다. var value: T? { didSet { self.listener?(value) } } init(_ value: T?) { self.value = value } // 동작을 담아두는 클로저입니다. (실행 X) private var listener: ((T?) -> Void)? // 1. 이 함수가 호출이 되면 아래와 같은 작업을 실행 func bind(_ listener: @escaping (T?) -> Void) { // completion에서 value의 값을 갖고 동작을 실행시킨다. listener(value) // 다음으로 위의 동작을 listener에 저장시킨다. self.listener = listener } }

 

 

2. ViewController & ViewModel

<swift>
class CartViewModel { var item: Observable<Int> = Observable(0) } class Cart { var viewModel = CartViewModel() var itemcCount = 0 func setBinding() { viewModel.item.bind { [weak self] num in guard let num = num else { return } self?.itemcCount = num } } func addCount(n: Int) { viewModel.item.value = n } }

 

 

3. 실행

<swift>
let cart = Cart() // 이 바인딩을 실행시켜주면 동작 실행 및 동작을 저장 cart.setBinding() print(cart.itemcCount) // 값이 바뀌면 didSet이 동작하며 setBinding에 저장해둔 동작을 실행 cart.addCount(n: 10) print(cart.itemcCount) cart.addCount(n: 20) print(cart.itemcCount) cart.addCount(n: 30) print(cart.itemcCount) // 0 // 10 // 20 // 30
반응형
profile

Danny의 iOS 컨닝페이퍼

@Danny's iOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!