下面的代码段在Xcode playground中工作,但如果我在项目中投入.onAppear/.task,则无法工作.

如果有人能帮我,我将不胜感激.

let n = Notification.Name("event")
Task {
    for await value in NotificationCenter.default.notifications(named: n, object: nil) {
        if let str = value.object as? String {
            await asyncPrint(value: str)
        }
    }
}

NotificationCenter.default.post(name: n, object: "event1")
NotificationCenter.default.post(name: n, object: "event2")
NotificationCenter.default.post(name: n, object: "event3")

推荐答案

如果在Task之外、post之前创建通知流,则可以消除此计时问题:

let n = Notification.Name("event")
let notifications = NotificationCenter.default.notifications(named: n, object: nil)

Task {
    for await notification in notifications {
        if let string = notification.object as? String {
            await asyncPrint(value: string)
        }
    }
}

NotificationCenter.default.post(name: n, object: "event1")
NotificationCenter.default.post(name: n, object: "event2")
NotificationCenter.default.post(name: n, object: "event3")

Swift相关问答推荐

在Swift中initt()完成后运行一个函数

Swift 5.10:无法从非隔离的deinit访问属性*,这是Swift 6中的错误''''

在SWIFTUI&39;S视图修改器中使用等待关键字

';NSInternal不一致异常';,原因:';可见导航栏Xcode 15.0 Crash请求布局

使用UICollectionViewFlowLayout创建水平的UICollectionView,并同时将单元格对齐到左边和右边的能力

为什么这段Swift读写锁代码会导致死锁?

确定路径是否相交的有效方法

如何在类中打印函数

如何避免从模块导入函数

SwiftUI 分段 Select 器的问题

如何有条件地依赖桌面与 iOS 的系统库?

使 Swift 并发中的任务串行运行

如何根据 SwiftUI 中的字体大小定义按钮的大小?

VStack SwiftUI 中的动态内容高度

当我必须在 Swift 中的类、 struct 和枚举之间进行 Select 时,我应该如何推理?

在 Xcode 中自动实现 Swift 协议方法

如何为多个类 Swift 进行扩展

swift中静态函数和单例类的区别

在 Swift 中从服务器播放视频文件

在情节提要中设置的 UITableViewCell 的恢复 ID 和标识符有什么区别