[iOS] MVVM

Architecture

Model: 如同MVC的M

View: ViewController在此只負責處理UI

ViewModel: 原本MVC中controller處理的邏輯移到ViewModel處理, 與View通常會做data binding.

優點: 分工更清楚, 更方便測試

缺點: 如MVC有著一樣的問題, 只是程式碼肥大的部份從ViewController變成了ViewModel

ObservableObject

用於data binding.

class ObservableObject<T> {
    var value: T {
        didSet {
            self.valueChangedClosure?(self.value)
        }
    }
    
    private var valueChangedClosure: ((T)-> (Void))?
    
    init(value: T) {
        self.value = value
    }
    
    func addObserver(isFireNow: Bool = true, _ valueChangedClosure: @escaping (T)-> (Void)) {
        self.valueChangedClosure = valueChangedClosure
        
        if(isFireNow == true) {
            self.valueChangedClosure?(self.value)
        }
    }
    
    func removeObserver() {
        self.valueChangedClosure = nil
    }
}

ex:

Last updated