ViewModel에서의 data 작성

class ApartmentViewModel: ObservableVMProtocol {
    var data: Observable<[Int]> = Observable([])
}

Binding은 값이 변화하는 것을 감지하여 UI를 변경하기 때문에 data의 값이 변화하는것을 관찰해야하므로 Observable type으로 지정한다. 여기서 Observable type은 자체 Helper Class로 별도로 작성해야한다.

class Observable<T> {
    // 3) 호출되면, 2번에서 받은 값을 전달한다.
		// 다양한 자료형일 수 있어서 Generic으로 지정!
    private var listener: ((T) -> Void)?

    // 2) 값이 변화할때마다 didSet을 이용하여 listener에 해당 값을 전달
    var value: T {
        didSet {
            listener?(value)
        }
    }

    // 1) 초기화하여 값을 입력받고, 그 값을 "value"에 저장한다.
    init(_ value: T) {
        self.value = value
    }

    // 4) 다른 곳에서 bind라는 메소드를 호출하게 되면,
    // value에 저장했던 값을 전달해주고,
    // 전달받은 "closure"를 호출하고 그 후 listener를 설정한다.
    func bind(_ closure: @escaping (T) -> Void) {
        // closure에서 value의 값을 갖고 동작을 실행시킨다.
        closure(value)
        // 다음으로 위의 동작을 listener에 저장시킨다.
        listener = closure
    }
}

Data Binding in MVVM on iOS

https://velog.io/@kipsong/iOSDesignPattern-MVVM-과-DataBinding에-대한-간략한-소개 https://yoonah-dev.oopy.io/c2c639a9-9833-46be-bc2e-1d1e764ccd55 https://roniruny.tistory.com/246 https://beenii.tistory.com/124