Ios 函数在下一行代码之前完全执行。
我的viewController中有此代码。问题是当调用两个函数来加载CKRecord对象中的所有数据时。下一行代码执行并打印0作为记录计数。我希望Swift等待这两个函数完成,然后打印它们的计数。解决这个问题需要帮助Ios 函数在下一行代码之前完全执行。,ios,swift3,Ios,Swift3,我的viewController中有此代码。问题是当调用两个函数来加载CKRecord对象中的所有数据时。下一行代码执行并打印0作为记录计数。我希望Swift等待这两个函数完成,然后打印它们的计数。解决这个问题需要帮助 override func viewDidLoad() { super.viewDidLoad() view1.layer.borderWidth = 1 view1.layer.cornerRadius = 10 tableView.layer.
override func viewDidLoad() {
super.viewDidLoad()
view1.layer.borderWidth = 1
view1.layer.cornerRadius = 10
tableView.layer.borderWidth = 1
tableView.layer.cornerRadius = 10
loadNewData() // function that loads all partyAccounts
fetchPartyAccounts() // function to load all transactions
print(loadTransactionData.count)
print(partyAccountsData.count)
}
func loadNewData() {
let qry = CKQuery(recordType: "PartyAccounts", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
qry.sortDescriptors = [NSSortDescriptor(key: "Party_ID", ascending: true)]
publicDB.perform(qry, inZoneWith: nil) { (results, error) in
DispatchQueue.main.async {
if let rcds = results {
self.partyAccountsData = rcds
}
}
if error != nil {
self.showAlert(msg: (error?.localizedDescription)!)
}
}
self.tableView.reloadData()
}
func fetchPartyAccounts() {
let qry = CKQuery(recordType: "Transactions", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
qry.sortDescriptors = [NSSortDescriptor(key: "Party", ascending: true)]
publicDB.perform(qry, inZoneWith: nil) { (results, error) in
DispatchQueue.main.async {
if let rcds = results {
self.loadTransactionData = rcds
}
if error != nil {
self.showAlert(msg: (error?.localizedDescription)!)
}
}
}
self.tableView.reloadData()
}
做这样的事
variable_A= your_First_Function()
variable_B= your_Second_Function()
print(variable_A)
print(variable_B
希望这能解决你的问题。虽然不确定,但你可以试一试。请务必告诉我它是否有效。您可以尝试以下方法:
override func viewDidLoad() {
super.viewDidLoad()
view1.layer.borderWidth = 1
view1.layer.cornerRadius = 10
tableView.layer.borderWidth = 1
tableView.layer.cornerRadius = 10
loadNewData(){
print(partyAccountsData.count)
} // function that loads all partyAccounts
fetchPartyAccounts() {
print(loadTransactionData.count)
} // function to load all transactions
// print(loadTransactionData.count)
// print(partyAccountsData.count)
}
func loadNewData(callback:@escaping () -> Void) {
let qry = CKQuery(recordType: "PartyAccounts", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
qry.sortDescriptors = [NSSortDescriptor(key: "Party_ID", ascending: true)]
publicDB.perform(qry, inZoneWith: nil) { (results, error) in
DispatchQueue.main.async {
if let rcds = results {
self.partyAccountsData = rcds
self.tableView.reloadData()
callback()
}
}
if error != nil {
self.showAlert(msg: (error?.localizedDescription)!)
}
}
}
func fetchPartyAccounts(callback:@escaping () -> Void) {
let qry = CKQuery(recordType: "Transactions", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
qry.sortDescriptors = [NSSortDescriptor(key: "Party", ascending: true)]
publicDB.perform(qry, inZoneWith: nil) { (results, error) in
DispatchQueue.main.async {
if let rcds = results {
self.loadTransactionData = rcds
callback()
self.tableView.reloadData()
}
if error != nil {
self.showAlert(msg: (error?.localizedDescription)!)
}
}
}
}
谢谢你的帮助,但它仍然按照你的方法返回0。不要问,告诉我。学习理解异步方法是如何工作的。将打印行分别放在完成块的末尾。并将要重新加载表视图的行也放入完成块(在分派块内部)中。这表明错误表明-parameter callback()隐式不转义。当我单击修复它时,它会将callback:()->Void更改为callback:@escaping()->Void@Aakash你说得对,这能解决你的问题吗?