Skip to content

Repository files navigation

LoadableView

LoadableView reduces boilerplate when creating SwiftUI views that have loading/loaded/error states.

Author

Axel Ancona Esselmann, axel@anconaesselmann.com

License

LoadableView is available under the MIT license. See the LICENSE file for more info.

Usage

For a none-trivial example take a look at the example app Books, which demostrates the usage of LoadableView using the OpenLibrary API

LoadableView is great for fetching lists of things:

import SwiftUI
import LoadableView
structBook{letname:String}structBooksView:DefaultLoadableView{@StateObjectvarvm=BooksViewModel()func loaded(_ books:[Book])->someView{List{ForEach(books){ book inText(book.name)}}}}@MainActorfinalclassBooksViewModel:LoadableViewModel{@PublishedvarviewState:ViewState<[Book]>=.notLoaded
varoverlayState:OverlayState=.none
privateletservice=BookService()func load()asyncthrows->[Book]{tryawait service.fetchAll()}}

Resources that have an ID use IDedLoadableView:

import SwiftUI
import LoadableView
structBookView:IDedDefaultLoadableView{varid:UUID@StateObjectvarvm=BookViewModel()func loaded(_ book:Book)->someView{VStack{Text(book.name)}}}@MainActorfinalclassBookViewModel:IDedLoadableViewModel{varid:UUID?@PublishedvarviewState:ViewState<Book>=.notLoaded
varoverlayState:OverlayState=.none
privateletservice=BookService()func load(id:UUID)asyncthrows->Book{tryawait service.fetchBook(withId: id)}}

About

LoadableViews reduces boilerplate when creating SwiftUI views that have loading/loaded/error states.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages