同期的な重い処理をdispatchし、その結果をUIに反映する方法
Q&A
Closed
解決したいこと
Swift Concurrencyの下記の処理はどこが良くないか知りたい
下記コードではModelが保持している[Word]を条件に合わせてfilterし、その結果をPublished propertyに代入しています。
Modelが保持している[Word]は要素数が1万を超えるため、main threadでfilterした場合UIがガクガクになってしまいます。そこで他のthreadで同時並行的に処理をしたいのですが、Arrayのfilterという同期的な処理をasync awaitでうまく取得する方法がわからず苦戦しています。
助言をいただけると非常に助かります!
よろしくお願いします。
@Published var words:[Word] = []
@MainActor //UIに反映されるので@MainActor
public func setWords() async {
self.words = await filteredWords()
}
@MainActor //dispatchするために@MainActorをコメントアウトするとUIに反映されない
private func filteredWords() async -> [Word]{
async let words = Model.shared.words.filter {...} //ここが重いからdispatchしたい
return await words
}