Экранирование закрытия захватывает неоткрывающийся параметр 'обещание' - PullRequest
1 голос
/ 26 мая 2020
• 1000 линия. Как я могу это решить?
 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"))
                }
            }
        }

1 Ответ

1 голос
/ 26 мая 2020

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()
    }
}
...