你好,我是Swift的新手,我正在使用SwiftUI进行我的项目,我在其中下载了一些天气数据,并将其显示在ContentView()中。
我想突出文本的某些部分,如果它包含一些特定的话,但我不知道如何开始。
在ContentView()中,我尝试设置一个函数来接收从Web下载的字符串并返回一个字符串。我认为这是错误的,因为SwiftUI根本没有对文本应用修饰符。
例如,在我的ContentView()中,我希望单词“雷暴”具有.bold()修饰符:
struct ContentView: View {
let testo : String = "There is a thunderstorm in the area"
var body: some View {
Text(highlight(str: testo))
}
func highlight(str: String) -> String {
let textToSearch = "thunderstorm"
var result = ""
if str.contains(textToSearch) {
let index = str.startIndex
result = String( str[index])
}
return result
}
}
5条答案
按热度按时间l5tcr1uw1#
如果这只需要简单的字样式,那么这里是可能的解决方案。
使用Xcode 11.4 / iOS 13.4进行测试
**注意:**以下是以前使用的函数,但如@Lkabo所述,它对非常长的字符串有限制
mkshixfv2#
iOS 13,Swift 5。这篇中等大小的文章中描述了一个通用的解决方案。使用它,你可以突出显示任何地方的任何文本,唯一的问题是它的长度不能超过64个字符,因为它使用了位掩码。
https://medium.com/@marklucking/an-interesting-challenge-with-swiftui-9ebb26e77376
这是文章中的基本代码。
这个用来掩盖文字。
2w2cym1i3#
您可以连接多个文本视图。
cl25kdpy4#
如果您的目标是iOS 15/macOS 12及更高版本,则可以使用AttributedString。例如:
如果希望匹配不区分大小写,可以替换以下行
与
k4aesqcs5#
@Asperi的答案很好用,下面是一个修改过的变体,它通过单词数组进行搜索:
用法示例: