在Swift中单块打开内部块

时间:2014-11-03 03:16:48

标签: swift block

这给了我一个错误:

NSNotificationCenter.defaultCenter().addObserverForName(MyNotification, object: nil, queue: nil) { (notification: NSNotification?) in
    self.variable?.myMethod()
}

但这很好:

NSNotificationCenter.defaultCenter().addObserverForName(MyNotification, object: nil, queue: nil) { (notification: NSNotification?) in
    println()
    self.variable?.myMethod()
}

知道为什么以及如何解决它?

谢谢。

1 个答案:

答案 0 :(得分:1)

你所看到的是“隐性回报”。 Swift假设如果你有一个表达式作为闭包的实现,那么它从闭包返回该行代码的结果。这是Apple Swift Programming Language文本中记录的优化(请查看Closures intro中的最后一段/项目符号列表)。

因此,如果你不想隐含地从第一个语句返回,你需要有一个return语句。

所以你的代码应该是这样的:

NSNotificationCenter.defaultCenter().addObserverForName(MyNotification, object: nil, queue: nil) { (notification: NSNotification?) in
  self.variable?.myMethod()
  return
}