SwiftUI 中有没有办法更改字符串中特殊字符的颜色?

时间:2021-06-24 09:45:07

标签: ios swift swiftui

我正在尝试构建泰语应用。为了显示泰语单词的发音,我想使用这三个特殊字符“\ / -”。为了便于阅读,我想将这些字符的颜色更改为红色。 有没有办法在 SwiftUI 中做到这一点?

我将其用作模型:

struct Alphabet {
    var letter: String
    var byname: String
    var translation: String
    var consonantClass: ConsonantClass
}

这是视图模型:

let middleConsonants: [Alphabet] = [
    Alphabet(letter: "ก", byname: "gô:- gai\\", translation: "Chicken", consonantClass: .middle)
]

在这里,在视图中,我想用不同的颜色显示它:

struct ConsonantsListView: View {
    var vm: ConsonantsViewModel = ConsonantsViewModel()
    var consonants: [Alphabet]
    
    var body: some View {
        ForEach(0..<consonants.count, id: \.self) { index in
            HStack {
                Spacer()
                NavigationLink(destination:
                    VStack(spacing: 20) {
                        Text(consonants[index].byname)
                            .font(.largeTitle)
                        Text(consonants[index].translation)
                    }) {
                        Text(consonants[index].letter)
                            .font(.largeTitle)
                }
                Spacer()
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

在 SwiftUI 中,您可以使用 Text 运算符轻松连接 + 对象并分配不同的颜色。

例如,这会显示一个红色的“Hello”,然后是一个绿色的“World!”

 Text("Hello ")
        .foregroundColor(.red)
        + Text("World!")
        .foregroundColor(.green)

答案 1 :(得分:1)

在 iOS 15 中,属性文本将可用,这将使这变得非常容易。

在那之前,您可以用一种颜色为每个字符(或子字符串)创建一个文本:

func textRedSpecialCharacters(input: String) -> some View {
        let chars = ["\\", "/", "-"]
        
        return HStack(spacing: 0) {
            ForEach(0..<input.count, id: \.self) { index in
                let char = String(input[input.index(input.startIndex, offsetBy: index)])
                if chars.contains(char) {
                    Text(char).foregroundColor(.red).font(.largeTitle)
                } else {
                    Text(char).font(.largeTitle)
                }
            }
        }
    }

只是一个简单的例子,但非常适合您的代码。