我有以下功能loadData,我想在refreshableSwiftUI 串列中使用它。為此,我需要使它成為一個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使用asyncfor 回圈捕獲。因此,如果您愿意,可以繼續使用您的followersPublisher和您的followingPublisher,只需使用async/await而不是組合來訂閱它們。
另一方面,根據這些發布者的行為,您可能希望更進一步地遵循此鏈并擺脫這些發布者并用async您可以從async/await背景關系呼叫的方法替換它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398781.html
上一篇:蘋果開發商出口合規
