项目作者: heroesofcode

项目描述 :
A View State library for Swift, it returns the results for each state
高级语言: Swift
项目地址: git://github.com/heroesofcode/ViewState.git
创建时间: 2020-05-21T04:14:29Z
项目社区:https://github.com/heroesofcode/ViewState

开源协议:MIT License

下载




CI
SPM compatible


License

Overview

A View State library to return the results for each state

Usage

In ViewModel calls the states that will return to ViewController

  1. import ViewState
  2. final class ViewModel {
  3. private var viewState = ViewState<Model, APIError>()
  4. private let service = Service()
  5. func fetchData() -> ViewState<Model, APIError> {
  6. viewState.fetchSource {
  7. self.service.getData { [weak self] result in
  8. switch result {
  9. case .success(let response):
  10. self?.viewState.success(data: response)
  11. case .failure(let error):
  12. self?.viewState.error(error: error)
  13. }
  14. }
  15. }
  16. return viewState
  17. }
  18. }

In the ViewController it calls the ViewModel method and places the states of each one.

  1. import UIKit
  2. import ViewState
  3. final class ViewController: UIViewController {
  4. private let viewModel = ViewModel()
  5. override func viewDidLoad() {
  6. super.viewDidLoad()
  7. loadData()
  8. }
  9. private func loadData() {
  10. viewModel.fetchData()
  11. .loadingObserver(onLoading)
  12. .successObserver(onSuccess)
  13. .errorObserver(onFailure)
  14. }
  15. private func onLoading() {
  16. // Event loading
  17. }
  18. private func onSuccess(response: Model) {
  19. // Event success
  20. }
  21. private func onFailure(error: APIError) {
  22. // Event error
  23. }
  24. }

loadingObserver is optional, you can just use success and error

  1. private func loadData() {
  2. viewModel.fetchData()
  3. .successObserver(onSuccess)
  4. .errorObserver(onFailure)
  5. }

See a demo below. You can see this demo in our example :smiley:.

Installation

Swift Package Manager (SPM)

  1. import PackageDescription
  2. let package = Package(
  3. name: "<Your Product Name>",
  4. dependencies: [
  5. .package(url: "https://github.com/heroesofcode/ViewState", exact: "2.0.1")
  6. ],
  7. targets: [
  8. .target(
  9. name: "<Your Target Name>",
  10. dependencies: ["ViewState"]),
  11. ]
  12. )

Contributing

To contribute, just fork this project and then open a pull request, feel free to contribute, bring ideas and raise any problem in the issue tab.

License

ViewState is released under the MIT license. See LICENSE for details.