@escaping
じゃないといけないのでだめそうですね。struct Updater<Object: AnyObject, Target> { let object: Object let keyPath: ReferenceWritableKeyPath<Object, Target> func update(_ body: @escaping (inout Target) throws -> Void) rethrows { DispatchQueue.main.async { try body(&object[keyPath: keyPath]) } } }