通用异步数组的 enumerate() 方法

enumerate() method for generic async array

您好,我尝试为我的自定义异步数组创建 enumerate() 方法,但仍然存在编译错误。我的自定义 class 看起来像这样:

class AsyncArray<T> {

private var array = [T]()
private var queue = DispatchQueue(label: "async_queue", attributes: .concurrent)

    func enumerated() -> EnumeratedSequence<[T]> {
        var value = EnumeratedSequence<[T]>() // compilation error Cannot invoke initializer for type 'EnumeratedSequence<[T]>' with no arguments
        queue.sync {
            value = self.array.enumerated()
        }
        return value
    }
}

如何对我的自定义 class 实施 enumerated() 方法?

您分配给 value 只是为了立即在 sync 调用中覆盖它。没必要。

DispatchQueue.sync让你直接return一个结果:

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!
    }
}