Swifty Alert

GitHub License X (formerly Twitter) Follow

SwiftyAlert 是一个轻量级、多平台、易于使用的 SwiftUI 包,用于错误处理。它与 SwiftUI Environment 集成。

平台

安装

在 Xcode 的 App 项目或框架中


或者在 Swift Package 中,将其添加到 Package.swift 的 dependencies 中

let package = Package(
    ...
    dependencies: [
        .package(url: "https://github.com/chocoford/SwiftyAlert.git", from: "1.0.0"),
    ],
    targets: [
        .target(
            ...
            dependencies: [
                ...
                "SwiftyAlert"
            ],
            ...
        )
    ]
)

用法

导入包

import SwiftyAlert

首先注入 environments

例如,您可以直接在 YourApp.swift 中注入 environments

@main
struct YourApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .swiftyAlert() // <-- inject environments here.
        }
    }
}

通过 @Environment 使用

struct ContentView: View {
  @Environment(\.alert) private var alert // <-- use with @Environment
  
  var body: some View {
	Button {
          alert(title: "Alert") {
              Button {
                  ...
              } label: {
                  Text("Alert action")
              }
          } message: {}
          
          // or just use with error
          do {...} catch {
             alert(error)
          }
          
        } label: {
          Text("Alert")
        }
    }
}

通过 AlertToast 使用

此外,如果您的项目已经导入了 AlertToast,您可以使用相同的方式使用 alertToast

import AlertToast
import SwiftyAlert

struct ContentView: View {
  @Environment(\.alertToast) private var alertToast

  var body: some View {
    Button {
      do {...} catch {
        alertToast(error) 
      }
    } label: {
      Text("Toggle alertToast")
    }
  }
}

通过 AlertToast 以及 .sheet.fullscreenCover 使用

您可以额外应用 .swiftyAlert(...) 使 alertToast 在 sheetfullscreenCover 中显示。

...
.sheet(isPresented: $showSheet) {
    SheetView()
        .swiftyAlert() // <-- inject for sheet view to display alertToast
}

问题排查

鸣谢

elai950 - AlertToast: Create Apple-like alerts & toasts using SwiftUI