对循环内的异步块感到困惑
Confused about async block inside loop
我想在闭包块内执行完所有循环后才打印数据,因为我不知道如何准确使用调度组。我尝试了几种方法。
我做错了什么?
private func recognizeText(images: [UIImage]) {
let myDispatchGroup = DispatchGroup()
self.extractedTextfromImages(images: images) { blocks in
myDispatchGroup.enter()
for block in blocks {
for line in block.lines {
//save emirate id
if isValidEmiratesID(emiratesID: line.text) == true {
let id = line.text
self.dt.id = id
}
// save name
if line.text.lowercased().range(of: "name") != nil {
if let range = line.text.range(of: ":") {
let nm = line.text[range.upperBound...]
let name = String(nm.trimmingCharacters(in: .whitespaces))
self.dt.name = name
}
}
}
}
myDispatchGroup.leave()
}
myDispatchGroup.notify(queue: .main) {
print("data is \(self.dt)")
}
}
myDispatchGroup.enter()
for i in 1...3 {
print("out")
for i in 1...3 {
print("inner")
}
}
myDispatchGroup.leave()
myDispatchGroup.notify(queue: .main) {
print(“now loop ended ")
}
输出=
出来
内
内
内
出来
内
内
内
出来
内
内
内
现在循环结束
我想在闭包块内执行完所有循环后才打印数据,因为我不知道如何准确使用调度组。我尝试了几种方法。
我做错了什么?
private func recognizeText(images: [UIImage]) {
let myDispatchGroup = DispatchGroup()
self.extractedTextfromImages(images: images) { blocks in
myDispatchGroup.enter()
for block in blocks {
for line in block.lines {
//save emirate id
if isValidEmiratesID(emiratesID: line.text) == true {
let id = line.text
self.dt.id = id
}
// save name
if line.text.lowercased().range(of: "name") != nil {
if let range = line.text.range(of: ":") {
let nm = line.text[range.upperBound...]
let name = String(nm.trimmingCharacters(in: .whitespaces))
self.dt.name = name
}
}
}
}
myDispatchGroup.leave()
}
myDispatchGroup.notify(queue: .main) {
print("data is \(self.dt)")
}
}
myDispatchGroup.enter()
for i in 1...3 {
print("out")
for i in 1...3 {
print("inner")
}
}
myDispatchGroup.leave()
myDispatchGroup.notify(queue: .main) {
print(“now loop ended ")
}
输出=
出来
内
内
内
出来
内
内
内
出来
内
内
内
现在循环结束