如何在 Swift 3中记录函数闭包参数的参数?

在 Xcode 8 beta 和 Swift 3中,当你有一个以闭包作为参数的方法时,例如:

func foo(bar: (String) -> Void) {
bar("Hello, world")
}

如何记录闭包的参数? 例如,如果我这样写:

/// Calls bar with "Hello, world"
/// - parameter bar: A closure to call
func foo(bar: (String) -> Void) {
bar("Hello, world")
}

然后快速帮助看起来像这样:

foo(bar:) Quick Help

我想知道的语法是什么,将允许我写一些文本,以取代“无描述”非常感谢!

15546 次浏览

据我所知,只有在给闭包参数贴上标签时,才能记录它们:

/// Calls bar with "Hello, world"
/// - parameter bar: A closure to call
/// - parameter theString: A string to use
func foo(bar: (theString: String) -> Void) {
bar(theString: "Hello, world")
}

这不太理想: 它强制您在调用闭包时使用参数标签,如果存在命名冲突,似乎没有办法区分这两者。

Edit : 正如@Arnaud 指出的,可以使用 _来避免在调用闭包时使用参数标签:

/// Calls bar with "Hello, world"
/// - parameter bar: A closure to call
/// - parameter theString: A string to use
func foo(bar: (_ theString: String) -> Void) {
bar("Hello, world")
}

事实上,这是 Swift 3中唯一有效的方法,因为参数标签不再是类型系统的一部分(参见 SE-0111)。

这个看起来已经坏了很久了。下面是 XCode 11.6的一个示例,您可以在其中看到:

1)参数记录在@Tim Vermeulen 的回答中 enter image description here

2)尽管如此,“无描述”表仍然出现在帮助弹出窗口中 enter image description here

3) 但是文本在快速帮助窗口中正确显示 enter image description here

我想我们需要等待(希望)苹果来解决这个问题。

不过还有一个小小的改进,不要在每一行都写上“ Parameter”,而是使用以下语法:

- Parameters:
- name1: description
- name2: description

(压痕似乎很重要)

然后你会得到 enter image description here

但是它并不在函数被调用的地方工作。