gpt4 book ai didi

ios - SwiftUI 以异步方式加载很长的列表

转载 作者:行者123 更新时间:2023-11-30 10:24:57 25 4
gpt4 key购买 nike

我有一个导航和详细 View ,它发送日期(键)字典和​​结构数组(但结构并不重要,它包含字符串数组和其他内容。

如果我发送一个非常非常长的字典,应用程序将卡住在所选行中,并且在列表完成加载每条记录后会显示详细信息。

struct DetailView: View {
var selectedChat: [Date: [TextStruct]]? // you can try with [Date: [String]]?

var body: some View {

List
{
ForEach(self.selectedChat.keys.sorted(), id: \.self)
{ key in //section data
Section(header:
Text("\(self.selectedChat[key]![0].date)
{
ForEach(self.selectedChat[key]!, id:\.self) {sText in
// my ChatView(sText) ....
}
}
}
}

我尝试通过添加此变量在开始时加载一些行

@State private var dateAndText: [Date: [TextStruct]] = [:]

用 self.dateAndText 和 .onAppear 替换上面的代码 (self.selectedChat):

.onAppear {
if let chat = self.selectedChat {

let keysDateSorted = chat.allText.keys.sorted()
self.chatLeader = chat.chatLeader

for key in keysDateSorted.prefix(30) {
self.dateAndText[key] = chat.allText[key]
}


DispatchQueue.global(qos: .utility).async {
self.dateAndText = chat.allText

self.progressBarValue = 1
}

}
}

使用这个解决方案,一旦我推送该行,我立即可以看到前 30 条记录,这没问题,但在加载所有记录之前我无法滚动。我知道有一种方法仅当用户在列表末尾滚动时才加载数组,但如果用户不在列表末尾滚动,我也想加载所有列表。

那么,有没有一种方法可以部分加载列表(例如每 100 条记录发送并更新数组)并以异步方式加载(为了不卡住显示从而导致不良的用户体验)?

最佳答案

您几乎肯定会遇到所描述和修复的问题 here作者:保罗· hudson 。

SwiftUI 正在尝试为所有更改设置动画,因此如果您使用他的 hack 来解决该问题,它应该可以工作,但您将丢失列表更改之间的所有动画。苹果开发人员回应了他和戴夫·德隆在 Twitter 上讨论的问题,他们表示这绝对是他们希望解决的问题。

文章的tldr:将 .id(UUID()) 添加到 List 初始化程序的末尾。

关于ios - SwiftUI 以异步方式加载很长的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60136801/

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