转义闭包捕获非转义参数'promise'

Escaping closure captures non-escaping parameter 'promise'

我正在尝试使用发布者,但我在计时器中收到此错误:"Escaping closure captures non-escaping parameter 'promise'"。线。 我该如何解决这个问题?

 extension OperationQueue {

        func publisher<Output, Failure: Error>(_ block: @escaping (Future<Output, Failure>.Promise) -> Void) -> AnyPublisher<Output, Failure> {
            Future<Output, Failure> { promise in
                self.addOperation {
                    block(promise)
                }
            }.eraseToAnyPublisher()
        }
    }

    struct ContentView: View {


        func getDataViaPublisher()->AnyPublisher<String,Error> {

            OperationQueue.main.publisher { promise in

                Timer.scheduledTimer(withTimeInterval: Double.random(in: 1...3), repeats: false) { (timer) in. // <<<<< error here
                    promise(.success("Chris"))
                }
            }
        }

Promise 也是闭包,因此您也需要在参数中使其成为 @escaping

这里是固定扩展

extension OperationQueue {

    func publisher<Output, Failure: Error>(_ block: @escaping (@escaping Future<Output, Failure>.Promise) -> Void) -> AnyPublisher<Output, Failure> {
        Future<Output, Failure> { promise in
            self.addOperation {
                block(promise)
            }
        }.eraseToAnyPublisher()
    }
}