Вы назначаете value
только для немедленной перезаписи в вызове sync
. Там нет необходимости.
DispatchQueue.sync
позволяет вам напрямую вернуть результат:
import Dispatch
class AsyncArray<T> {
private var array = [T]()
private var queue = DispatchQueue(label: "async_queue", attributes: .concurrent)
func enumerated() -> EnumeratedSequence<[T]> {
return queue.sync {
return self.array.enumerated()
}
}
}
Для справки: если вам нужно было присвоить захваченную переменную, как вы пытались это сделать (что было бы необходимо, например, для вызова async
), это выглядело бы примерно так:
import Dispatch
class AsyncArray<T> {
private var array = [T]()
private var queue = DispatchQueue(label: "async_queue", attributes: .concurrent)
func enumerated() -> EnumeratedSequence<[T]> {
var result: EnumeratedSequence<[T]>?
return someAsyncCall {
result = self.array.enumerated()
}
waitForAsyncCallToFinish()
return result!
}
}