我有以下功能loadData
,我想在refreshable
SwiftUI 串列中使用它。为此,我需要使它成为一个async
函式:
func loadData() {
// Publishers
let followersPublisher = modelLoader.loadAllFollowers(withId: id)
let followingPublisher = modelLoader.loadAllFollowing(withId: id)
let friendshipsPublisher = Publishers.Zip(followersPublisher, followingPublisher)
.share()
.eraseToAnyPublisher()
// Sinks
getFollowers(from: followersPublisher)
getFollowerChange(
from: followersPublisher,
cachedFollowers: followers
)
getFollowing(from: followingPublisher)
getNotFollowingUserBack(from: friendshipsPublisher)
getUserNotFollowing(from: friendshipsPublisher)
followersPublisher
.connect()
.store(in: &cancellables)
followingPublisher
.connect()
.store(in: &cancellables)
}
在这个函式中,所有独立的函式都使用Publisher
接收器。例如:
private func getFollowing(from publisher: Publishers.MakeConnectable<AnyPublisher<Set<User>, Never>>) {
publisher
.sink(
receiveCompletion: { _ in },
receiveValue: { [weak self] following in
self?.following = following
}
)
.store(in: &cancellables)
}
我怎样才能把它变成一个async
函式以便我可以使用await
它?
uj5u.com热心网友回复:
每个联合发布者都有一个values
异步序列的属性:
https://developer.apple.com/documentation/combine/publisher/values-1dm9r
因此,任何以 Publisher 开头的管道都可以由async/await
代码替换,values
使用async
for 回圈捕获。因此,如果您愿意,可以继续使用您的followersPublisher
和您的followingPublisher
,只需使用async/await
而不是组合来订阅它们。
另一方面,根据这些发布者的行为,您可能希望更进一步地遵循此链并摆脱这些发布者并用async
您可以从async/await
背景关系呼叫的方法替换它们。
0 评论