【问题标题】:How to fix escaping closure? Error is: Converting non-escaping value may allow it to escape如何修复转义关闭?错误是:转换非转义值可能允许它转义
【发布时间】:2020-02-04 23:08:33
【问题描述】:

这是我的代码:

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 提示我添加的所有转义,但错误仍然存​​在。我需要做什么来解决这个问题?

【问题讨论】:

  • 你到底想达到什么目的?
  • 我正在尝试将函数foo 作为参数传递给Class Sub

标签: swift


【解决方案1】:

你还需要一层@escaping

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

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

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 2019-01-05
    • 2019-02-19
    • 2017-07-02
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多