Оё бояд барои идомаи кор баъд аз даъвати функсияи асинхронӣ бо await дар дохили вазифае, ки дар методи viewDidLoad оғоз шудааст, ҷараёни асосӣ истифода шавад?
sobes.tech AI
Ҷавоб аз AI
Дар iOS, агар шумо функсияи асинхронии бо await дар дохили вазифае, ки дар viewDidLoad оғоз шудааст, даъват кунед, муҳим аст, ки фаҳмед, ки пас аз await идома дар кадом сӯроҳа хоҳад буд.
Ба таври пешфарз, агар шумо await-ро дар дохили Task бе нишон додани афзалиятҳо ё dispatcher-ҳо истифода баред, идома метавонад дар ҳар кадом сӯроҳа рӯй диҳад, на ҳатман дар сӯроҳаи асосӣ. Ин метавонад ба мушкилот оварда расонад, агар шумо UI-ро навсозӣ кунед, зеро ҳама тағиротҳои интерфейс бояд дар сӯроҳаи асосӣ рӯй диҳанд.
Барои таъмини он, ки пас аз await код дар сӯроҳаи асосӣ идома ёбад, шумо метавонед ба таври равшан ба dispatcher-и асосӣ гузаред бо истифода аз await MainActor.run { ... } ё истифодаи @MainActor барои метод ё синф.
Масалан:
override func viewDidLoad() {
super.viewDidLoad()
Task {
let data = await fetchData()
await MainActor.run {
self.updateUI(with: data)
}
}
}
Ин гуна, бояд барои идомаи кор дар сӯроҳаи асосӣ истифода баред, агар пас аз амалиёти асинхронӣ бо UI кор кардан лозим бошад.