在SwiftUI中,是否有一种方法可以更改字符串中特殊字符的颜色?

4
我正在尝试构建一个泰语应用程序。为了显示泰语单词的发音,我想使用这三个特殊字符“\ / -”。为了提高可读性,我想将这些字符的颜色更改为红色。在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个回答

6
在SwiftUI中,您可以使用加号运算符轻松地连接Text对象并分配不同的颜色。
例如,这个示例显示一个红色的“Hello”,后面跟着一个绿色的“World!”。
 Text("Hello ")
        .foregroundColor(.red)
        + Text("World!")
        .foregroundColor(.green)

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)
                }
            }
        }
    }

这只是一个简单的例子,但对于您的代码非常有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接