如何显示文本取决于 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
并将正确的 String
和 foregroundColor
分配给每个 `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
}
}
}
我正在使用 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
并将正确的 String
和 foregroundColor
分配给每个 `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
}
}
}