AsyncButton is a Button capable of running concurrent code.
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 AsyncButtonOperations:
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")
}
}- 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.