gpt4 book ai didi

ios - 如何在 SwiftUI 中基于绑定(bind)枚举更改 View 的样式?

转载 作者:行者123 更新时间:2023-12-01 18:34:34 25 4
gpt4 key购买 nike

我想改变我的Text的风格以下:

查看

@State var status = Status.offline

Button(action: { self.goOnline() }){
Text("Offline")
.statusButtonStyle(color: $status.color)
}.padding().background(Color.black).opacity(0.7).cornerRadius(40.0)

extension Text {
func statusButtonStyle(color: Color = $status.color) -> Text {
return self
.foregroundColor(color)
}
}

基于 enum在我的模型文件中:

型号
enum Status {
case offline(color: Color = Color.black)
case loading(color: Color = Color.gray)
case online(color: Color = Color.green)
}

然而,上面的代码提出了 2 个错误,阻止了这一点:
  • 我的 extension显示 Use of unresolved identifier '$status'
  • 我的 enum显示 Use of undeclared type 'Color'

  • 这些使我无法执行此绑定(bind)方法来更改 Text 的样式.

    知道如何解决此问题以使其正常工作吗?

    最佳答案

    这是固定的变体。使用 Xcode 11.4/iOS 13.4 测试

    enum Status {
    case offline(color: Color = .black)
    case loading(color: Color = .gray)
    case online(color: Color = .green)

    var color: Color {
    switch self {
    case .offline(let color):
    return color
    case .loading(let color):
    return color
    case .online(let color):
    return color
    }
    }
    }

    struct StatusView: View {
    @State var status: Status = .offline()

    var body: some View {
    Button(action: { self.goOnline() }){
    Text("Offline")
    .statusButtonStyle(color: status.color)
    }.padding().background(Color.black).opacity(0.7).cornerRadius(40.0)
    }
    }

    extension Text {
    func statusButtonStyle(color: Color) -> Text {
    return self
    .foregroundColor(color)
    }
    }

    关于ios - 如何在 SwiftUI 中基于绑定(bind)枚举更改 View 的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62292131/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com