AsyncStream在视图中大量出现,而AsyncPublisher则不会。
创始人
2024-09-21 09:30:33
0

可以使用Combine框架中的AsyncSequence和Publishers中的PublishSubject解决AsyncStream过度刷新的问题。

示例代码:

import Combine

class ViewModel {
    let data = (1...10).map { "Test \($0)" }
    var publisher = PassthroughSubject()
    
    func fetchData() {
        for item in data {
            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                self.publisher.send(item)
            }
        }
    }
}

struct ContentView: View {
    @StateObject var viewModel = ViewModel()
    
    var body: some View {
        VStack {
            Text("Loaded data:")
                .padding()
            
            ScrollView {
                LazyVStack {
                    AsyncSequence(initial: viewModel.publisher) { subject in
                        subject
                    }
                    .map { Text($0) }
                }
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
        }
        .onAppear {
            viewModel.fetchData()
        }
    }
}

上述代码通过使用PassthroughSubject来定期发送数据,并使用AsyncSequence实现异步拉取数据的效果,在视图中使用了LazyVStack实现了CollectionView的效果。

在这种方式下,视图立即显示并正常运行,而不会频繁运行更新。

相关内容

热门资讯

透视科技!wpk插件辅助,约局... 透视科技!wpk插件辅助,约局吧德州透视,举措教程(一直是有挂)-哔哩哔哩进入游戏-大厅左侧-新手福...
透视线上!德普之星辅助器(透视... 透视线上!德普之星辅助器(透视)开挂辅助攻略(原来是真的挂)-哔哩哔哩1、进入游戏-大厅左侧-新手福...
透视讲解!德普之星透视辅助软件... 透视讲解!德普之星透视辅助软件激活码,cloudpoker辅助,项目教程(本来是有挂)-哔哩哔哩1、...
透视脚本!德州局脚本(透视)开... 透视脚本!德州局脚本(透视)开挂辅助攻略(原来是真的挂)-哔哩哔哩1、金币登录送、破产送、升级送、活...
透视新版!智星菠萝可以辅助吗,... 透视新版!智星菠萝可以辅助吗,wepoker-h5下载,法门教程(竟然存在有挂)-哔哩哔哩一、智星菠...
透视了解!pokemomo辅助... 透视了解!pokemomo辅助工具,德普之星透视辅助插件,攻略教程(切实真的是有挂)-哔哩哔哩1、上...
透视智能!安装不了wepoke... 透视智能!安装不了wepoker(透视)开挂辅助攻略(好像有挂)-哔哩哔哩1、让任何用户在无需安装不...
透视有挂!wepoker好友助... 透视有挂!wepoker好友助力码,wepoker有没有机器人,方式教程(都是是真的挂)-哔哩哔哩1...
透视识别!德州透视脚本(透视)... 透视识别!德州透视脚本(透视)开挂辅助器(一贯有挂)-哔哩哔哩1、在德州透视脚本ai机器人技巧中,中...
透视真的!wepoker模拟器... 透视真的!wepoker模拟器哪个,wpk俱乐部有没有辅助,策略教程(一直是真的挂)-哔哩哔哩1、上...