一个视图状态库,用于返回每个状态的结果
在 ViewModel 中调用将返回给 ViewController 的状态
import ViewState
final class ViewModel {
private var viewState = ViewState<Model, APIError>()
private let service = Service()
func fetchData() -> ViewState<Model, APIError> {
viewState.fetchSource {
self.service.getData { [weak self] result in
switch result {
case .success(let response):
self?.viewState.success(data: response)
case .failure(let error):
self?.viewState.error(error: error)
}
}
}
return viewState
}
}
在 ViewController 中调用 ViewModel 方法,并放置每个状态。
import UIKit
import ViewState
final class ViewController: UIViewController {
private let viewModel = ViewModel()
override func viewDidLoad() {
super.viewDidLoad()
loadData()
}
private func loadData() {
viewModel.fetchData()
.loadingObserver(onLoading)
.successObserver(onSuccess)
.errorObserver(onFailure)
}
private func onLoading() {
// Event loading
}
private func onSuccess(response: Model) {
// Event success
}
private func onFailure(error: APIError) {
// Event error
}
}
loadingObserver 是可选的,您可以只使用 success 和 error
private func loadData() {
viewModel.fetchData()
.successObserver(onSuccess)
.errorObserver(onFailure)
}
请看下面的演示。您可以在我们的示例中看到这个演示 😃。
import PackageDescription
let package = Package(
name: "<Your Product Name>",
dependencies: [
.package(url: "https://github.com/heroesofcode/ViewState", exact: "2.0.1")
],
targets: [
.target(
name: "<Your Target Name>",
dependencies: ["ViewState"]),
]
)
要做出贡献,只需 fork 此项目,然后打开一个 pull request,欢迎您贡献、提出想法,并在 issue 选项卡中提出任何问题。
ViewState 在 MIT 许可证下发布。有关详细信息,请参阅LICENSE。