gpt4 book ai didi

swift - 异步解析的 future 不会触发

转载 作者:行者123 更新时间:2023-12-05 01:36:36 24 4
gpt4 key购买 nike

我目前正在尝试学习 Swift+Combine,但我什至无法复制一个简单的教程。

我当前的 Playground 项目如下所示:

import Combine
import Foundation

let future = Future<Int, Never> { promise in
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
print("hello")
promise(.success(1))
}
}

future.sink(receiveCompletion: { print($0) },
receiveValue: { print($0) })

print("end")

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
print(future)
}

我期望的输出是:

end
hello
1
finished
Combine.Future<Swift.Int, Swift.Never>

但是当我运行这段代码时,输​​出只显示:

end
hello
Combine.Future<Swift.Int, Swift.Never>

它似乎吞没了整个水槽。起初我以为可能在 DispatchQueue 触发回调时 future 已经被删除,但事实似乎并非如此。

有人可以向我解释我做错了什么吗?

最佳答案

您需要存储对您使用 sink 创建的订阅的引用,否则订阅和订阅者会立即被释放,因此 Future 不会发出任何值发布者

let futureSubscription = future.sink(receiveCompletion: { print($0) },
receiveValue: { print($0) })

关于swift - 异步解析的 future 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61802005/

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