ViewStateCore 1.7.0

ViewStateCore 1.7.0

congncif 维护。



  • 作者:
  • congncif

ViewStateCore

CI Status Version License Platform

ViewController 的问题

在每种提出的模型中,无论是 MVC、MVVM 还是 VIPER,我们都会遇到一个问题。我们的视图控制器变得越来越麻烦。需要存储过多的信息,如输出,引用的对象,显示数据,用户首选项,临时变量等,这变得越来越复杂,尤其是在逻辑开始变得复杂时。一个解决方案是为视图控制器创建一个对象来存储上述信息,并在必要时通知视图控制器以刷新视图。这就是所说的 View State

它是如何工作的

View State 解决两个主要任务:

  • 通过将它们分组到 VS 中来消除视图控制器中的碎片化
  • 在数据更改时提供更新机制

这符合 Clean MVC 的目标,即减少大量视图控制器,解决混乱的视图控制器,并作为单向数据流的最后一块。

View State 基于 KVO 机制,VS 的所有属性都与 Objective C 相关。当 VS 的属性发生变化时,它会向所有订阅它的对象发送通知。View State 支持多级,这意味着 VS 可以包含多个子 VS。最佳实践是我们只有两个级别的 View State

使用方法

class MovieListState: ViewState {
    @objc dynamic var movies: [MovieModel] = []
}

class FilterViewState: ViewState {
    @objc dynamic var selectedCategory: String = "Love"
}

class AExampleState: ViewState {
    @objc dynamic var movies: MovieListState = MovieListState()
    @objc dynamic var search: FilterViewState = FilterViewState()
}

class ViewController: ..., ViewStateSubscriber {
    var state = AExampleState()
    
    ...
    
    override func viewDidLoad() {
        super.viewDidLoad()
        state.subscribe(for: self)
    }
    
    func viewStateDidChange(newState: ViewState) {
        if let _ = newState as? MovieListState {
            // refresh views
        } else if let _ = newState as? FilterViewState {
            // reload data
        } else {
            // refreshState()
        }
    }
}

需求

  • Xcode 8.3+
  • Swift 3+

安装

ViewStateCore通过CocoaPods提供。要安装,只需将以下行添加到您的Podfile中

pod 'ViewStateCore'

作者

congncif, [email protected]

许可证

ViewStateCore采用MIT许可证。有关更多信息,请参阅LICENSE文件