     
     fileprivate init(object: NSObject, keyPath: AnyKeyPath, callback: @escaping (NSObject, NSKeyValueObservedChange<Any>) -> Void) {
         path = _bridgeKeyPathToString(keyPath)
-        let _ = _NSKeyValueObservation.swizzler
+        let _ = NSKeyValueObservation.swizzler
         self.object = object
         self.callback = callback
     }


extension _KeyValueCodingAndObserving {
    
    ///when the returned _NSKeyValueObservation is deinited or invalidated, it will stop observing
    public func observe<Value>(
            _ keyPath: KeyPath<Self, Value>,
            options: NSKeyValueObservingOptions = [],
            changeHandler: @escaping (Self, NSKeyValueObservedChange<Value>) -> Void)
        -> _NSKeyValueObservation {
        let result = _NSKeyValueObservation(object: self as! NSObject, keyPath: keyPath) { (obj, change) in
            let notification = NSKeyValueObservedChange(kind: change.kind,
                                                        newValue: change.newValue as? Value,
                                                        oldValue: change.oldValue as? Value,

    return __KVOKeyPathBridgeMachinery._bridgeKeyPath(keyPath)
}

// NOTE: older overlays called this NSKeyValueObservation. We now use
// that name in the source code, but add an underscore to the runtime
// name to avoid conflicts when both are loaded into the same process.
@objc(_NSKeyValueObservation)
public class NSKeyValueObservation : NSObject {
    
    @nonobjc weak var object : NSObject?
    @nonobjc let callback : (NSObject, NSKeyValueObservedChange<Any>) -> Void
    @nonobjc let path : String
    
    //workaround for <rdar://problem/31640524> Erroneous (?) error when using bridging in the Foundation overlay
    @nonobjc static var swizzler : NSKeyValueObservation? = {
        let bridgeClass: AnyClass = NSKeyValueObservation.self
        let observeSel = #selector(NSObject.observeValue(forKeyPath:of:change:context:))
        let swapSel = #selector(NSKeyValueObservation._swizzle_me_observeValue(forKeyPath:of:change:context:))
        let rootObserveImpl = class_getInstanceMethod(bridgeClass, observeSel)
        let swapObserveImpl = class_getInstanceMethod(bridgeClass, swapSel)
        method_exchangeImplementations(rootObserveImpl, swapObserveImpl)
