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

Sør*_*sen 60 markup xcode swift

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

func foo(bar: (String) -> Void) {
    bar("Hello, world")
}
Run Code Online (Sandbox Code Playgroud)

如何记录闭包所需的参数?例如,如果我写了这个:

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

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

foo(bar :)快速帮助

我想知道什么语法可以让我写一些文字来取代"没有描述".非常感谢!

Tim*_*len 72

据我所知,如果你标记它们,你只能记录闭包参数:

/// 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")
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:正如@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")
}
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,您可以编写`(_ theString:String)`以获得用于文档目的的本地参数名称,而无需在调用站点使用它.事实上,由于你必须使用Xcode 8 beta 6,否则编译器会抱怨"函数类型不能有参数标签".参见[SE-0111](https://github.com/apple/swift-evolution/blob/master/proposals/0111-remove-arg-label-type-significance.md)和[此电子邮件](https:/ /lists.swift.org/pipermail/swift-evolution-announce/2016-July/000233.html)了解详情. (7认同)
  • 我和@ wuf810有同样的问题.即使我标记了闭包参数并添加了它的描述,它仍然显示一个正方形,表示它没有该参数的描述. (4认同)
  • 这绝对回答了我的问题,谢谢!我实际上不知道你可以为一个闭包添加参数标签!那是个好消息.相反,我认为这根本不是理想的.参数标签使代码更容易理解imho,我宁愿使用参数标签而不是使用完全匿名参数调用闭包. (2认同)
  • 是的,我同意。如果你能做一些类似 `- parameter $0: Description` 的事情就太好了,也许在 `- parameter bar` 之后进一步缩进 (2认同)
  • 尽管这允许标签出现,但我仍然看到其详细信息中的“无描述”。有人真的找到了解决方法吗?我实际上想显示一个适当的描述。 (2认同)

Air*_*ène 7

这似乎打破了很长一段时间。这是 XCode 11.6 的示例,您可以在其中看到:

1 ) 参数记录在@Tim Vermeulen 的回答中 在此处输入图片说明

2 ) 尽管如此,“无描述”表出现在帮助弹出窗口中 在此处输入图片说明

3 )但是文本在快速帮助窗口中正确显示 在此处输入图片说明

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

不过略有改善。不要在每一行写“参数”,而是使用以下语法:

- Parameters:
  - name1: description
  - name2: description
Run Code Online (Sandbox Code Playgroud)

(缩进似乎很重要)

然后你会得到 在此处输入图片说明

但它在调用函数的任何地方都不起作用......