AsyncStream在视图上垃圾邮件,而AsyncPublisher不会
创始人
2024-09-21 09:30:31
0

使用 AsyncPublisher 来代替 AsyncStream。

以下是使用 AsyncPublisher 进行演示的示例代码(假设我们想要在视图中渲染一系列异步生成器生成的数据):

// 定义异步生成器以生成数据
func dataGenerator() -> AsyncGenerator {
    AsyncStream { continuation in
        // 在此处生成数据并将其发送到视图
        continuation.yield("item 1")
        continuation.yield("item 2")
        continuation.yield("item 3")
        continuation.finish()
    }.makeAsyncPublisher().makeAsyncGenerator()
}

// 使用异步生成器在视图中渲染数据
struct ContentView: View {
    var body: some View {
        List {
            ForEach(dataGenerator(), id: \.self) { item in
                Text(item)
            }
        }
    }
}

上述代码使用 AsyncStream 来创建一个异步生成器来生成数据,并在视图中渲染该数据。 但是,由于 AsyncStream 会在生成器返回完成信号时继续发送事件,因此会导致视图被垃圾邮件。

为了避免这种情况,我们可以使用 AsyncPublisher 来创建异步生成器。 在此示例中,我们将 AsyncStream 包装在 AsyncPublisher 中,然后将其转换回 AsyncGenerator。这将导致异步生成器仅在返回完成信号时发送一次事件,从而在视图中避免垃圾邮件。

示例代码如下:

// 定义异步生成器以生成数据
func dataGenerator() -> AsyncGenerator {
    AsyncPublisher { subscriber in
        // 在此处生成数据并将其发送到视图
        subscriber.receive("item 1")
        subscriber.receive("item 2")
        subscriber.receive("item 3")
        subscriber.receive(completion: .finished)
        return AnyCancellable {}
    }.makeAsyncGenerator()
}

// 使用异步

相关内容

热门资讯

1分钟开挂!微乐河南小程序微乐... 1分钟开挂!微乐河南小程序微乐辅助脚本,微信边锋辅助,爆料教程-2026最新版本1、打开软件启动之后...
此事备受玩家关注!微信小程序财... 此事备受玩家关注!微信小程序财神十三章特殊牌(辅助挂)原来真的有挂(有挂指南)-哔哩哔哩,微信小程序...
第九分钟开挂!新玄龙辅助工具,... 第九分钟开挂!新玄龙辅助工具,乐乐围棋入门辅助,微扑克教程-2026最新版本1、上手简单,内置详细流...
据文件显示!益乐绍兴辅助(辅助... 据文件显示!益乐绍兴辅助(辅助挂)果然是有挂(有挂手段)-哔哩哔哩;无需打开直接搜索打开薇:1367...
第6分钟开挂!葫芦娃七子连心攻... 第6分钟开挂!葫芦娃七子连心攻略,飞驰娱乐科技软件,曝光教程-2026最新版本葫芦娃七子连心攻略辅助...
此事引发网友热议!关春天辅助凑... 关春天辅助凑一桌 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由: 1...
七分钟开挂!蜀山手游全自动辅助... 七分钟开挂!蜀山手游全自动辅助,边锋老友内蒙古辅助,2025新版-2026最新版本一、边锋老友内蒙古...
有了最新消息!亲友圈辅助吧(辅... 有了最新消息!亲友圈辅助吧(辅助挂)一直是有挂的(有挂学习)-哔哩哔哩您好:亲友圈辅助吧这款游戏可以...
9分钟开挂!哥哥打大a辅助工具... 9分钟开挂!哥哥打大a辅助工具,榕城510k有没有挂,微扑克教程-2026最新版本1、哥哥打大a辅助...
在玩家背景下!乐易四川麻将辅助... 您好:这款乐易四川麻将辅助游戏是可以开挂的,确实是有挂的,很多玩家在这款乐易四川麻将辅助游戏中打牌都...