Skip to content
This repository was archived by the owner on Oct 11, 2026. It is now read-only.
heroesofcodePublic archive

About

ViewState is a library written in Swift for iOS, tvOS, macOS & watchOS. It returns the results for each state

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Repository files navigation

Warning

This project is no longer maintained.
If you want to continue using ViewState, feel free to fork the repository and maintain your own version.

CI SPM compatible License

Overview

A View State library to return the results for each state

Support

iOS 15.0+ / macOS 12.0+ / tvOS 15.0+ / watchOS 7.0+ / visionOS 1+

Usage

In ViewModel calls the states that will return to 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
    }
}

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

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 is optional, you can just use success and error

private func loadData() {
     viewModel.fetchData()
         .successObserver(onSuccess)
         .errorObserver(onFailure)
}

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

Installation

import PackageDescription
let package = Package(
    name: "<Your Product Name>",
    dependencies: [
       .package(
           url: "https://github.com/heroesofcode/ViewState", 
           exact: "2.1.0"
        )
    ],
    targets: [
        .target(
            name: "<Your Target Name>",
            dependencies: ["ViewState"]
        ),
    ]
)

License

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

About

ViewState is a library written in Swift for iOS, tvOS, macOS & watchOS. It returns the results for each state

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages