Я знаю, что уже есть много вкладов по этой теме. Я пробовал различные варианты с DispatchGroup, но, похоже, я не могу сделать весь цикл останавливается до тех пор, пока определенная задача не будет завершена.
let names = ["peter", "susan", "john", "peter", "susan", "john"]
var holding = [String: [Double]]()
for i in 0...10 {
for name in names {
if holding[name] == nil {
Alamofire.request("https://jsonplaceholder.typicode.com", parameters: parameters).responseJSON { responseData in
// do stuff here
holding[name] = result
}
} else {
// do other stuff with existing "holding[name]"
}
// if if holding[name] == nil, the whole process should wait
}
}
Если я использую DispatchGroup, запросы Alamofire выполняются один за другим, но весь цикл не распознает, существует ли уже holding[name]
. Таким образом, holding[name]
всегда равно nil
, потому что цикл не ждет.
Большое спасибо!
РЕДАКТИРОВАТЬ:
Согласно ответам Майка и Версуса, я пробовал следующее:
var names = ["peter", "susan", "john", "peter", "susan", "john"]
var holding = [String: [Double]]()
let semaphore = DispatchSemaphore(value: 1)
for i in 0...10 {
DispatchQueue.global().async { [unowned self] in
self.semaphore.wait()
for name in names {
if holding[name] != nil {
Alamofire.request("https://jsonplaceholder.typicode.com", parameters: parameters).responseJSON { responseData in
// do stuff here
holding[name] = result
semaphore.signal()
}
} else {
// do other stuff with existing "holding[name]"
semaphore.signal()
}
// if if holding[name] != nil, the wholeprocess should wait
}
}
}
Но, к сожалению, приложение вылетает. Что я делаю не так?
unowned
и повторите попытку. - person Prashant Tukadiya   schedule 07.09.2017