【问题标题】:Closure not called inside object对象内部未调用闭包
【发布时间】:2017-04-09 18:41:14
【问题描述】:

出于学习目的,我正在尝试使用闭包运行这个简单的示例,但似乎没有像我预期的那样工作:

class Test {
    var callback: ((_ value: Int) -> Void)?

    func perform() {
        callback
    }
}

let t = Test()
t.callback = { _ in
    print("Test")
}

t.perform()

我预计"Test" 会被打印出来,但显然不是。有人能指出问题是什么吗?

【问题讨论】:

  • 您的代码无法编译。
  • 我在操场上写的,没有错误显示给我。让我在 Xcode 项目中试试吧。
  • 在perform 方法中,您可能希望将参数传递给callback,例如callback?(5).
  • 如此琐碎,我被 Playgrounds 愚弄了,没有看到错误。您可以将其发布为答案以便我接受吗?

标签: swift


【解决方案1】:

编译代码发现错误:

错误:表达式解析为未使用的左值 打回来 ^~~~~~~~

callback 只是(可选)闭包,而不是对闭包的调用。 显然 Playground 不会抱怨未使用的表达式。

使用一些参数调用闭包可以解决问题:

func perform() {
    callback?(5)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多