如何显示文本取决于 SwiftUI 中的开关大小写?

How to show Text depends on switch case in SwiftUI?

我正在使用 SwiftUI,我有一个 switch case 函数,取决于我想显示差异颜色和文本的那个 switch case。

    func status(status: Status){
            switch status {
            case .accepted:
//text "accepted"
                //green text   
    
            case .standby:
//text "standby"
                //yellow text
    
            case .notAllowed:
//text "notAllowed"
                 //red text
            }
        }

VStack(alignment: .leading) {
            Text("Test")
}

您可以简单地在视图主体内切换 status 并将正确的 StringforegroundColor 分配给每个 `case 内的 Text

struct StatusView: View {
    let status: Status

    var body: some View {
        switch status {
        case .accepted:
            Text("accepted")
                .foregroundColor(.green)
        case .standby:
            Text("standby")
                .foregroundColor(.yellow)
        case .notAllowed:
            Text("not allowed")
                .foregroundColor(.red)
        }
    }
}

或者如果你可以修改Status,你可以简单地给它分配一个String rawValue,然后根据它的值显示相应的文本就更容易了。

enum Status: String {
    case accepted
    case standby
    case notAllowed
}

struct StatusView: View {
    let status: Status

    var body: some View {
        Text(status.rawValue)
            .foregroundColor(statusColor(status: status))
    }

    private func statusColor(status: Status) -> Color {
        switch status {
        case .accepted:
            return .green
        case .standby:
            return .yellow
        case .notAllowed:
            return .red
        }
    }
}

这是一个更新和重构的答案,基于 David 答案,这样你就不再需要那个 ststusColor 函数了,你可以访问 colorValue 项目中的每个地方,而不是只能在 StatusView.

中访问的最后一个答案
struct StatusView: View {
    
    let status: Status
    
    var body: some View {
        
        Text(status.rawValue)
            .foregroundColor(status.colorValue)
        
    }
    
}


enum Status: String {
    
    case accepted
    case standby
    case notAllowed
    
    var colorValue: Color {
        switch self {
        case .accepted:
            return .green
        case .standby:
            return .yellow
        case .notAllowed:
            return .red
        }
    }
    
}