从 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
,因为它发生变化?
您不需要在此处捕获 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.
}
请记住,您在这个闭包内的 actor 之外,因此调用可能需要在 Task 内异步进行。
我有一个演员:
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
,因为它发生变化?
您不需要在此处捕获 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.
}
请记住,您在这个闭包内的 actor 之外,因此调用可能需要在 Task 内异步进行。