我试图在Swift 4中使用KVO观察OperationQueue操作计数,但在操作数组更改时会出现致命错误。
以下代码用于游乐场:
import Foundation
class MyObjectToObserve:NSObject {
@objc dynamic var queue = OperationQueue()
}
class MyObserver:NSObject {
@objc var objectToObserve: MyObjectToObserve
var observation: NSKeyValueObservation?
init(object: MyObjectToObserve) {
objectToObserve = object
super.init()
observation = observe(\.objectToObserve.queue.operations.count) { object, change in
print("Observed")
}
}
}
let myObjectToObserve = MyObjectToObserve()
let myObserver = MyObserver(object: myObjectToObserve)
myObjectToObserve.queue.addOperation {
print("First operation")
}
此错误:
致命错误:无法从KeyPath中提取字符串 Swift.KeyPath< __ lldb_expr_6.MyObserver,Swift.Int>:file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.74.1/src/swift/stdlib/public/SDK/Foundation/NSObject.swift, 第85行
据我所知,问题是OperationQueue操作是Swift数组,而KVO无法使用它。我试图使用带有整数的数组而不是OperationQueue并得到相同的错误。 如何在Swift 4中正确观察OperationQueue操作,还是在OperationQueue完成所有任务时有另一种获取通知的方法?
答案 0 :(得分:1)
您无法观察数组的count
属性。 You cannot observe any property of an array:
NSArray
个对象不可观察,因此在NSArray
对象上调用时,此方法会引发异常。
OperationQueue
有一个单独的operationCount
属性供您观察。
observation = observe(\.objectToObserve.queue.operationCount) { object, change in
print("Observed")
}