In Xcode 8 beta and Swift 3, when you have a method that takes a closure as a parameter, for example:
func foo(bar: (String) -> Void) { bar("Hello, world") }
How do you document the parameters the closure takes? For example, if I wrote this:
/// Calls bar with "Hello, world" /// - parameter bar: A closure to call func foo(bar: (String) -> Void) { bar("Hello, world") }
Then the quick help looks like this:
I would like to know what the syntax is that will allow me to write some text to replace "No description." Many thanks!
A closure is said to escape a function when the closure is passed as an argument to the function, but is called after the function returns. When you declare a function that takes a closure as one of its parameters, you can write @escaping before the parameter's type to indicate that the closure is allowed to escape.
Understanding closure syntax in Swift For closures, we must always write down the return type even when the closure doesn't return anything. Instead of -> Void or "returns Void ", this type specifies -> () or "returns empty tuple". In Swift, Void is a type alias for an empty tuple.
As far as I know, you can only document the closure parameters if you label them:
/// 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") }
This is less than ideal: it forces you to use an argument label when you call the closure, and if there are naming conflicts, there seems no way to distinguish between the two.
Edit: As @Arnaud pointed out, you can use _
to prevent having to use the parameter label when calling the closure:
/// 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") }
In fact, this is the only valid approach in Swift 3 because parameter labels are no longer part of the type system (see SE-0111).
This seems to be broken for quite some time. Here is an example with XCode 11.6, where you can see that :
1 ) the parameters are documented as explained in @Tim Vermeulen answer
2 ) nevertheless, the "no description" table appears in the help pop-over window
3 ) BUT the text appears correctly in the quick help window
I guess we need to wait (hope) for Apple to fix this.
A slight improvement, though. Instead of writing "Parameter" at each line, use the following syntax :
- Parameters: - name1: description - name2: description
(indentation seems to be important)
Then you'll get
But it doesn't work everywhere the function is called...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With