Опубликовать `operationCount` из operationQueue внутри актора?
У меня есть актер:
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
скоро это превратится в ошибку.
Я получаю следующее предупреждение:
«Я» актера может быть захвачено только закрытием из инициализатора async.
Итак, как я могу вызвать издателя, на который другие модели могут отреагировать, чтобы опубликовать очередь операций?
operationCount
как это меняется?
1 ответ
Здесь снимать не нужно.
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.
}
Просто помните, что вы находитесь вне актера внутри этого замыкания, поэтому вызовы могут быть асинхронными внутри Task.