Swift 如何修复逃逸关闭?错误是:转换非转义值可能允许它转义

Swift 如何修复逃逸关闭?错误是:转换非转义值可能允许它转义,swift,Swift,这是我的密码: class Main { init() { let x = Sub(s: foo) } func foo(completion: @escaping (String?)->Void) { DispatchQueue.global().async { completion(nil) } } } class Sub { var s: ((String?)->

这是我的密码:

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
    }
}
我在这里得到错误
让x=Sub(s:foo)

将非转义值转换为“(字符串?->Void”可能会允许它转义`


我已经添加了XCode提示我添加的所有转义,但错误仍然存在。我需要做什么来修复此问题?

您需要另一层
@escaping

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

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

您需要另一层
@转义

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

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

你到底想要实现什么?我正在尝试将函数
foo
作为参数传递给
Class Sub
你到底想要实现什么?我正在尝试将函数
foo
作为参数传递给
Class Sub