ButtonKit:SwiftUI 中处理可抛出和异步操作的按钮库





项目名称:ButtonKit

ButtonKit 是一个 SwiftUI 库,它提供了两种按钮:AsyncButton 和可处理错误抛出的按钮。以下是该项目的主要特点和使用方法:

可抛出操作(Throwable)

使用 AsyncButton 可以执行可能抛出错误的异步操作:

AsyncButton {
    try doSomethingThatCanFail()
} label {
    Text("Do something")
}

如果按钮的闭包抛出错误,默认情况下按钮会震动。可以通过 .throwableButtonStyle(.shake) 来设置这种行为,或者通过传递 .none 来禁用:

AsyncButton {
    try doSomethingThatCanFail()
} label {
    Text("Do something")
}
.throwableButtonStyle(.none)

异步操作(Asynchronous)

AsyncButton 支持异步操作,闭包中可以使用 tryawait

AsyncButton {
    try await doSomethingThatTakeTime()
} label {
    Text("Do something")
}

在操作进行中,按钮不会重复启动新任务,但按钮仍然可以被点击。可以使用 .disabledWhenLoading() 修饰符来禁用按钮:

AsyncButton {
  ...
}
.disabledWhenLoading()

外部触发

可以通过设置按钮的唯一标识符来从其他视图触发按钮操作:

enum LoginViewButton: Hashable {
  case login
}

struct ContentView: View {
    var body: some View {
        AsyncButton(id: LoginViewButton.login) {
            try await login()
        } label: {
            Text("Login")
        }
    }
}

确定性进度

AsyncButton 支持进度报告:

AsyncButton(progress: .discrete(totalUnitCount: files.count)) { progress in
    for file in files {
        try await file.doExpensiveComputation()
        progress.completedUnitCount += 1
    }
} label: {
    Text("Process")
}

 

或许喜欢

ActivityIndicatorView:SwiftUI 创建的预设加载指示器库

ActivityIndicatorView 是一个 SwiftUI 库,提供多种预设的加载动画指示器,支持自定义样式和动画,适用于 iOS、watchOS、tvOS 和 macOS 平台。

最近更新 2024-12-11

SlideButton:SwiftUI 可滑动解锁按钮组件

SlideButton 是一个 SwiftUI 库,提供了一个可滑动的按钮,用户可以通过滑动来解锁或执行特定动作,支持多种自定义样式和行为。

最近更新 2024-12-09

swiftui-vertical-tab-view:SwiftUI 垂直分页标签视图

swiftui-vertical-tab-view 是一个 SwiftUI 库,提供了 iOS 14 风格的垂直分页标签视图,支持自定义索引位置和隐藏索引。

最近更新 2024-12-09

热榜

Made with in Shangrao,China By 老雷

Copyright © devler.cn 1987 - Present

赣ICP备19009883号-1