gpt4 book ai didi

ios - 超过最大文本 ("") 连接长度 - SwiftUI -

转载 作者:行者123 更新时间:2023-12-01 15:44:14 24 4
gpt4 key购买 nike

引用 Asperi ( https://stackoverflow.com/users/12299030/asperi ) 在问题上发布的答案:Highlight a specific part of the text in SwiftUI
我发现他的回答非常有用,但是,当我的 String 输入超过 32k 个字符时,应用程序会崩溃,所以我假设 String() 最大为 32k,我正在寻找解决方法。
在我的应用程序中,如果有人搜索“pancake”这个词,搜索词将被存储,当用户查看详细信息页面(比如食谱)时,pancake 这个词将突出显示。一切都适用于这个答案,但是当配方超过 32k 个字符时,应用程序会因超出索引范围的消息而崩溃。 (具体错误信息:Thread 1: EXC_BAD_ACCESS (code=2, address=0x16d43ffb4))
这是该问题的答案中修改后的代码:
这将打印数据:

hilightedText(str: self.recipes.last!.recipeData!)
.multilineTextAlignment(.leading)
.font(.system(size: CGFloat( settings.fontSize )))
上面这段代码显然有更多内容,但本质上,它迭代了一个数据库,并找到了最后一个包含“搜索词”的记录,并在此处显示 recipeData,它是数据库中包含的一个大字符串。
实现 highlightText 功能:
    func hilightedText(str: String) -> Text {
let textToSearch = searched
var result: Text!
for word in str.split(separator: " ") {
var text = Text(word)
if word.uppercased().contains(textToSearch.uppercased()) {
text = text.bold().foregroundColor(.yellow)
}
//THIS NEXT LINE has been identified as the problem:
result = (result == nil ? text : result + Text(" ") + text)
}
return result
}
我已经稍微修改了 Asperi 的答案以满足我的需要,并且一切都很好,除非我遇到一个大小超过 32k 的 recipeData 条目,如前所述。
我试过更换 String使用其他一些数据类型,但没有任何效果..
有任何想法吗?
谢谢!
更新:
在评论中进行了长时间的讨论后,问题的根本原因似乎是在某些时候,对于某些记录,我超过了最大的 Text("") 串联。
在上面的代码中,每个单词都被拆分、评估并添加到长字符串“result”中,最终看起来像这样: Text("word") + Text(" ") + Text("Word")等等。
这样做了,所以我可以轻松地为每个单词应用颜色属性,但似乎一旦我达到一定数量的单词(小于 32k,一个记录是 22k 并崩溃),应用程序就会崩溃。
狮子座建议 https://stackoverflow.com/a/59531265/2303865这个线程作为替代方案,我将不得不尝试实现它。
谢谢..

最佳答案

嗯......意外的限制......无论如何 - 学习新东西。
好的,这里是改进的算法,它应该远离那个限制。
使用 Xcode 12/iOS 14 测试。(也在引用主题 Highlight a specific part of the text in SwiftUI 中更新了代码)

func hilightedText(str: String, searched: String) -> Text {
guard !str.isEmpty && !searched.isEmpty else { return Text(str) }

var result = Text("")

var range = str.startIndex..<str.endIndex
repeat {
guard let found = str.range(of: searched, options: .caseInsensitive, range: range, locale: nil) else {
result = result + Text(str[range])
break
}

let prefix = str[range.lowerBound..<found.lowerBound]
result = result + Text(prefix) + Text(str[found]).bold().foregroundColor(.yellow)

range = found.upperBound..<str.endIndex
} while (true)

return result
}

关于ios - 超过最大文本 ("") 连接长度 - SwiftUI -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62975088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com