簡體   English   中英

如何根據 SwiftUI 中的綁定枚舉更改視圖樣式?

[英]How to change style of View based on binding enum in SwiftUI?

我想在下面更改我的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

Model

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

然而,上面的代碼提出了 2 個錯誤,阻止了這一點:

  1. 我的extension顯示Use of unresolved identifier '$status'
  2. 我的enum顯示Use of undeclared type 'Color'

這些使我無法執行此綁定方法來更改Text的樣式。

知道如何解決此問題以使其正常工作嗎?

  1. 您的Text擴展無法識別$status ,因為它是在另一個 scope 中定義的。
  2. 您的Status枚舉無法識別Color ,因為您可能沒有導入 SwiftUI。

這是固定的變體。 使用 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)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM