0

我有一个演员:

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发生变化时发布操作队列?

4

1 回答 1

3

你不需要在self这里捕捉。observe向您发送新值(基本上正是这个原因):

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

另外,oq如果theQueue你需要的话。如果你需要self,典型的做法是:

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

请记住,您在此闭包内的参与者之外,因此调用可能需要在任务内异步。

于 2021-09-30T00:47:23.867 回答