从 actor 中的 operationQueue 发布 operationCount?

Publish `operationCount` from operationQueue inside actor?

我有一个演员:

actor MyActor {
    
    let theQueue = OperationQueue()

    init() {

        _ = theQueue.observe(\OperationQueue.operationCount, options: .new) { oq, change in
            print("OperationQueue.operationCount changed: \(self.theQueue.operationCount)")
        }
        
    }

    ....

}

我试图让 KVO 触发某种类型的发布者调用,应用程序中的其他模型可以订阅并在 operationCount 更改时根据需要做出反应。

我本来打算有一个可能会设置它的函数,但是,截至目前,在该初始化程序中使用 self 给了我这个警告,根据这个:

https://forums.swift.org/t/proposal-actor-initializers-and-deinitializers/52322

马上就会报错

我得到的警告是这样的:

Actor 'self' 只能通过异步初始化程序的闭包捕获

那么,我如何触发发布者,其他模型随后可以做出反应,发布操作队列的 operationCount,因为它发生变化?

您不需要在此处捕获 selfobserve 向您发送新值(基本上就是这个原因):

_ = theQueue.observe(\OperationQueue.operationCount, options: .new) { oq, change in
    print("OperationQueue.operationCount changed: \(change.newValue!)")
}

此外,oqtheQueue,如果您需要的话。如果你需要 self,典型的做法是:

observation = observe(\.theQueue.operationCount, options: .new) { object, change in
    // object is `self` here.
}

请记住,您在这个闭包内的 actor 之外,因此调用可能需要在 Task 内异步进行。