1. ホーム
  2. swift

Swift 3で関数のクロージャパラメータを文書化する方法とは?

2023-08-04 07:31:28

質問

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")
}

すると、クイックヘルプはこのようになります。

私は、"No description."を置き換えるためにいくつかのテキストを書くことができる構文が何であるかを知りたいのです。

どのように解決するのですか?

私の知る限り、クロージャパラメータにラベルを付ける場合のみ、ドキュメント化することができます。

/// 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")
}

これは理想的ではありません。クロージャを呼び出すときに引数ラベルを使うことを強制され、名前の衝突があった場合、その2つを区別する方法がないように思われます。

編集 : 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 ).