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的效果。

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

相关内容

热门资讯

热门推荐!吉祥填大坑的破解方法... 您好:吉祥填大坑的破解方法这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户...
玩家科普!中至赣州黑科技辅助软... 玩家科普!中至赣州黑科技辅助软件,四川游戏家园破解,AI教程(传授有开挂辅助器);无需打开直接搜索打...
一分钟揭秘!越乡游义乌透视软件... 一分钟揭秘!越乡游义乌透视软件,新518互游脚本下载,详细教程(详细有开挂辅助插件);无需打开直接搜...
技术分享!手游游戏挂机辅助,决... 技术分享!手游游戏挂机辅助,决战卡五星辅助看牌器,AI教程(盘点有开挂辅助器);无需打开直接搜索打开...
科普常识!约局吧黑科技辅助器,... 您好:约局吧黑科技辅助器这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的...
玩家亲测!微乐山西小程序破解器... 玩家亲测!微乐山西小程序破解器,卡农大厅辅助,科技教程(分析有开挂辅助软件)1、下载安装好微乐山西小...
一起来讨论!盛世辅助工具,胡乐... 一起来讨论!盛世辅助工具,胡乐辅助脚本是真的假的,详细教程(通报有开挂辅助插件);无需打开直接搜索加...
每日必看教程!新财神正版辅助挂... 每日必看教程!新财神正版辅助挂,新祥心有挂吗,2026新版总结(盘点有开挂辅助平台);无需打开直接搜...
科技新动态!余干五十k攻略,七... 科技新动态!余干五十k攻略,七千在线辅助,微扑克教程(细节有开挂辅助平台);无需打开直接搜索打开薇:...
实测分享!家乡大贰小程序辅助器... 实测分享!家乡大贰小程序辅助器,微信小程序微乐辅助器,技巧教程(了解有开挂辅助插件);无需打开直接搜...