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

tea*_*moh 5 ios swift swiftui

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

\n

我用它作为模型:

\n
struct Alphabet {\n    var letter: String\n    var byname: String\n    var translation: String\n    var consonantClass: ConsonantClass\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是视图模型:

\n
let middleConsonants: [Alphabet] = [\n    Alphabet(letter: "\xe0\xb8\x81", byname: "g\xc3\xb4:- gai\\\\", translation: "Chicken", consonantClass: .middle)\n]\n
Run Code Online (Sandbox Code Playgroud)\n

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

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

vad*_*ian 7

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

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

 Text("Hello ")
        .foregroundColor(.red)
        + Text("World!")
        .foregroundColor(.green)
Run Code Online (Sandbox Code Playgroud)


Mak*_*ele 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)
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

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