通用异步数组的 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!
}
}
您好,我尝试为我的自定义异步数组创建 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!
}
}