arrays - 通用异步数组的 enumerate() 方法
问题描述
您好我尝试enumerate()
为我的自定义异步数组创建方法,但仍然有编译错误。我的自定义类看起来像这样:
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
}
}
如何enumerated()
为我的自定义类实现方法?
解决方案
您分配给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!
}
}
推荐阅读
- python-3.x - 我想安装 streamlit 但在 pyarrow 中出现错误
- sql - 选择分组查询的前 n 行
- node.js - 节点包串口给出垃圾输出
- aws-lambda - DynamoDB DocumentClient.put 意外返回 DynamoDB.putItem 错误
- xcode - XCODE 12 中通常显示的 3D 场景不起作用
- spring-boot - 带有springboot的Log4j2.xml没有生成日志文件
- asp.net-core - 在 Blazor 中发送 POST 请求后丢失 UI 线程
- spring - Spring动态异步
- javascript - 如何启用(进度条/加载图标)冻结屏幕?
- sql - 在 SQL 中选择具有一个最大值但另一个最小值的项目