Reputation: 769
I want to print the data only after executing all loops inside the closure block, since I don't know how to use dispatch group exactly. I have tried in several ways.
What am I doing wrong here?
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)")
}
}
Upvotes: 0
Views: 167
Reputation: 1420
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 ")
}
Output =
out
inner
inner
inner
out
inner
inner
inner
out
inner
inner
inner
now loop ended
Upvotes: 1