【发布时间】:2021-01-15 11:49:08
【问题描述】:
我的应用中有一个循环,可能需要几秒钟才能处理完。
我希望在循环在后台运行时立即关闭屏幕。
这可能吗?
我试过只添加循环:
DispatchQueue.main.async {
for _ in 1...self.numberOfTransactionsToAdd {
let newTransaction = Transaction()
var timeAdded = 1.months
newTransaction.transactionAmount = self.amountTextField.text!.toDouble()
newTransaction.transactionDescription = self.descriptionTextField.text
newTransaction.transactionDate = self.datePicked
newTransaction.transactionCategory = self.categoryPicked
newTransaction.repeatInterval = self.repeatInterval
newTransaction.transactionSubCategory = self.subcategoryPicked
newTransaction.subCategoryName = self.subcategoryPicked!.subCategoryName
try! self.realm.write {
self.realm.add(newTransaction)
}
self.datePicked = self.datePicked + timeAdded
}
}
}
我已经尝试添加整个函数:
@IBAction func doneButtonPressed(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
DispatchQueue.main.async {
self.saveTransaction()
}
}
但在视图关闭之前屏幕仍然挂起。
这是我第一次使用 DispatchQueue。我已经阅读了 Apple 关于它的文档,但它非常模糊。
这甚至是正确的方法吗?
有人可以帮助指导新手找到正确的方法吗?
【问题讨论】:
-
为什么有两个
DispatchQueues?第一段代码是否显示saveTransaction? -
那些代码 sn-ps 只是我尝试过的两种不同的东西,而不是一起尝试。
标签: swift for-loop asynchronous dispatch-queue