Как исправить выходящее закрытие? Ошибка: преобразование неэкранирующего значения может позволить ему экранировать - PullRequest
0 голосов
/ 07 октября 2019

Вот мой код:

class Main {
    init() {
        let x = Sub(s: foo)
    }

    func foo(completion: @escaping (String?)->Void) {
        DispatchQueue.global().async {
            completion(nil)
        }
    }
}

class Sub {
    var s: ((String?)->Void)->Void
    init(s: @escaping ((String?)->Void)->Void) {
        self.s = s
    }
}

Я получаю ошибку здесь let x = Sub(s: foo)

Преобразование неэкранирующего значения в '(String?) -> Void' может позволитьэто чтобы сбежать`

Я добавил все побеги, которые XCode побудил меня добавить, но ошибка все еще есть. Что мне нужно сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 07 октября 2019

Вам нужен еще один слой @escaping:

class Sub {
    var s: (@escaping (String?) -> Void) -> Void

    init(s: @escaping (@escaping (String?) -> Void) -> Void) {
        self.s = s
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...