Итак, я выполняю async-запрос, который возвращает несколько объектов Worker, каждый из которых имеет отношение к WorkerPeriod, и я использую это отношение для выполнения запроса, проблема в том, что запрос isync и когда он возвращается из веб-службы, workerIndex перепуталисьБлок хранит var в Swift 2.1
workerQuery.whereKey("construction", equalTo: currentConstruction).findObjectsInBackgroundWithBlock({ (unsafeWorkers, error) -> Void in
guard let workers = unsafeWorkers as? [Worker] where error == nil && workers.count == 0 else {
return
}
for var workerIndex = 0; workerIndex < workers.count; workerIndex++ {
let currentWorker = workers[workerIndex]
if let periodQuery = WorkerPeriod.query() {
periodQuery.whereKey("worker", equalTo: currentWorker)
let weakWorkerIndex = workerIndex
print("weakWorkerIndex = \(weakWorkerIndex) worker \(workerIndex)")
periodQuery.findObjectsInBackgroundWithBlock({ (unsafeWorkerPeriod, error) -> Void in
guard let workerPeriods = unsafeWorkerPeriod as? [WorkerPeriod] where error == nil && workerPeriods.count != 0 else {
return
}
print("block weakWorkerIndex = \(weakWorkerIndex) workerIndex \(workerIndex)")
.
.
})
}
}
Я пытался создать «weakWorkerIndex» в позволении, чтобы удерживать значение, как мы это делали в Objective-C с __block переменные, но это не работает, блок-взаимодействие просто игнорирует значение, как вы можете видеть на выходе:
weakWorkerIndex = 0 worker 0 weakWorkerIndex = 1 worker 1 block weakWorkerIndex = 0 workerIndex 2 block weakWorkerIndex = 0 workerIndex 2 block weakWorkerIndex = 0 workerIndex 2
К слову: я удалил ненужный код, чтобы упростить чтение.