如何添加 SwiftUI 自定义 ButtonStyle 作为静态扩展

Nic*_*vit 9 swift swiftui

在 swiftui3 中,您可以像这样使用按钮样式快捷方式


Button("0") {print("pressed 0")}
    .buttonStyle(.bordered)

Run Code Online (Sandbox Code Playgroud)

我想用我的自定义按钮样式类来做到这一点

struct CrazyButtonStyle:ButtonStyle{
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .foregroundColor(.red)
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样称呼它

Button("0") {print("pressed 0")}
    .buttonStyle(.crazy)
Run Code Online (Sandbox Code Playgroud)

我努力了

extension ButtonStyle{
    static var crazy:CrazyButtonStyle {
        get {
            return CrazyButtonStyle()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误

Contextual member reference to static property 'crazy' requires 'Self' constraint in the protocol extension
Run Code Online (Sandbox Code Playgroud)

Ale*_*sky 19

苹果建议的方式:

struct CrazyButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .foregroundColor(.red)
    }
}

extension ButtonStyle where Self == CrazyButtonStyle {
    static var crazy: Self { Self() }
}
Run Code Online (Sandbox Code Playgroud)

用法:

Button(action: {}) {
    Image(systemName: "forward.fill")
}
.buttonStyle(.crazy)
Run Code Online (Sandbox Code Playgroud)

来源:开发 iOS 应用程序教程