SwiftUI AsyncButton ?️
AsyncButton
is a Button
capable of running concurrent code.
Usage
AsyncButton
has the exact same API as Button
, so you just have to change this:
Button("Run") { run() }
to this:
AsyncButton("Run") { try await run() }
In addition to Button
initializers, you have the possibilities to specify special behaviours via AsyncButtonOptions
:
AsyncButton("Ciao", options: [.showProgressViewOnLoading, .showAlertOnError], transaction: Transaction(animation: .default)) {
try await run()
}
For heavy customizations you can have access to the AsyncButtonOperation
s:
AsyncButton {
try await run()
} label: { operations in
if operations.contains { operation in
if case .loading = operation {
return true
} else {
return false
}
} {
Text("Loading")
} else if
let last = operations.last,
case .completed(_, let result) = last
{
switch result {
case .failure:
Text("Try again")
case .success:
Text("Run again")
}
} else {
Text("Run")
}
}
Installation
- In Xcode, open your project and navigate to File → Swift Packages → Add Package Dependency…
- Paste the repository URL (
https://github.com/lorenzofiamingo/swiftui-async-button
) and click Next. - Click Finish.