Есть такой вот код.
class Service {
func fetch(completion: @escaping ([Int]) -> Void) {
DispatchQueue.global().asyncAfter(deadline: .now() + 5) {
DispatchQueue.main.async {
completion([1,1])
}
}
}
}
class Provider {
let service = Service()
var result: [Int] = []
let queue = DispatchQueue(label: "Foo")
func fetch() {
print("1")
queue.async(flags: .barrier) {
print("2")
self.service.fetch { (result) in
print("3")
self.result = result
}
}
}
func getBool(index: Int) -> Int {
print("4")
var res: [Int] = []
queue.sync {
res = self.result
}
print("5")
return index < res.count ? res[index] : -1
}
}
let p = Provider()
p.fetch()
print(p.getBool(index: 0))
print(p.getBool(index: 1))
Выводит в результате:
1
2
4
5
-1
4
5
-1
3
Проблема, как 3-ку втиснуть в нужное место? Т.е. надо как-то процесс тормознуть и дождаться пока не выполниться функция fetch.
В данном примере использую barrier, но это не правильно. =(
Заранее спасибо за любую помощь