web-dev-qa-db-ja.com

Swiftにはドキュメント生成サポートがありますか?

多くの言語がドキュメントコメントをサポートし、ジェネレーター(javadocdoxygen など)が同じコードを解析してコードドキュメントを生成できるようにします。

Swiftには、このようなタイプのドキュメントコメント機能がありますか?

225
pconcepcion

ドキュメンテーションコメントはXcodeでネイティブにサポートされ、クイックヘルプでスマートにレンダリングされたドキュメンテーションを生成します(両方のポップオーバーで シンボルをクリックして、クイックヘルプインスペクターで ⌥⌘2)。

シンボルドキュメンテーションコメントは、リッチプレイグラウンドコメントで使用されるものと同じ マークダウン構文 に基づいているため、プレイグラウンドでできることの多くは、ソースコードドキュメントで直接使用できるようになりました。

構文の詳細については、 Markup Formatting Reference を参照してください。豊富なプレイグラウンドコメントとシンボルドキュメントの構文にはいくつかの相違があることに注意してください。これらはドキュメントで指摘されています(たとえば、ブロッククォートはプレイグラウンドでのみ使用できます)。

以下は、シンボルドキュメンテーションコメントで現在機能する構文要素の例とリストです。


更新

Xcode 7 beta 4〜トップレベルのリスト項目として「- Throws: ...」を追加しました。これは、クイックヘルプでパラメーターと戻り値の説明とともに表示されます。

Xcode 7ベータ1〜Swift 2の構文に対するいくつかの重要な変更-マークダウンに基づいたドキュメントコメント(プレイグラウンドと同じ)。

Xcode 6.3(6D570)〜インデントされたテキストはコードブロックとしてフォーマットされ、後続のインデントがネストされます。このようなコードブロックに空白行を残すことはできないようです。そうしようとすると、文字が含まれている最後の行の末尾にテキストが追加されます。

Xcode 6.3 beta〜バックティックを使用して、ドキュメントのコメントにインラインコードを追加できるようになりました。


Swift 2の例

/// Text like this appears in "Description".
///
/// Leave a blank line to separate further text into paragraphs.
///
/// You can use bulleted lists (use `-`, `+` or `*`):
///
/// - Text can be _emphasised_
/// - Or **strong**
///
/// Or numbered lists:
///
/// 7. The numbers you use make no difference
/// 0. The list will still be ordered, starting from 1
/// 5. But be sensible and just use 1, 2, 3 etc…
///
/// ---
///
/// More Stuff
/// ==========
///
/// Code
/// ----
///
/// Use backticks for inline `code()`. Indentations of 4 spaces or more will create a code block, handy for example usage:
///
///     // Create an integer, and do nothing with it
///     let myInt = 42
///     doNothing(myInt)
///
///     // Also notice that code blocks scroll horizontally instead of wrapping.
///
/// Links & Images
/// --------------
///
/// Include [links](https://en.wikipedia.org/wiki/Hyperlink), and even images:
///
/// ![Swift Logo](/Users/Stuart/Downloads/Swift.png "The logo for the Swift programming language")
///
/// - note: That "Note:" is written in bold.
/// - requires: A basic understanding of Markdown.
/// - seealso: `Error`, for a description of the errors that can be thrown.
///
/// - parameters:
///   - int: A pointless `Int` parameter.
///   - bool: This `Bool` isn't used, but its default value is `false` anyway…
/// - throws: A `BadLuck` error, if you're unlucky.
/// - returns: Nothing useful.
func doNothing(int: Int, bool: Bool = false) throws -> String {
    if unlucky { throw Error.BadLuck }
    return "Totally contrived."
}

Swift Documentation Quick Help


Swift 2の構文( Markdown に基づく)


コメントスタイル

ドキュメンテーションコメントを生成するために、///(インライン)スタイルコメントと/** */(ブロック)スタイルコメントの両方がサポートされています。個人的には/** */コメントの視覚的なスタイルを好みますが、Xcodeの自動インデントは、コピー/貼り付けの際に先頭の空白を削除するため、このコメントスタイルのフォーマットを台無しにします。例えば:

/**
See sample usage:

    let x = method(blah)
*/

貼り付けると、コードブロックのインデントが削除され、コードとしてレンダリングされなくなります。

/**
See sample usage:

let x = method(blah)
*/

このため、私は通常///を使用し、この回答の残りの例で使用します。


ブロック要素

見出し:

/// # My Heading

または

/// My Heading
/// ==========


小見出し:

/// ## My Subheading

または

/// My Subheading
/// -------------


水平ルール:

/// ---


順不同(箇条書き)リスト:

/// - An item
/// - Another item

順序付けられていないリストには+または*を使用することもできます。一貫している必要があります。


順序付き(番号付き)リスト:

/// 1. Item 1
/// 2. Item 2
/// 3. Item 3


コードブロック:

///    for item in array {
///        print(item)
///    }

少なくとも4つのスペースのインデントが必要です。


インライン要素

エンファシス(斜体):

/// Add like *this*, or like _this_.


強い(太字):

/// You can **really** make text __strong__.

同じ要素にアスタリスク(*)とアンダースコア(_)を混在させることはできません。


インラインコード:

/// Call `exampleMethod(_:)` to demonstrate inline code.


リンク:

/// [Link Text](https://en.wikipedia.org/wiki/Hyperlink)


画像:

/// ![Alt Text](http://www.example.com/alt-image.jpg)

URLは、Web URL(「http://」を使用)または絶対ファイルパスURL(動作する相対ファイルパスを取得できないようです)のいずれかです。

すべてのURLを管理可能な1つの場所に保持するために、リンクと画像のURLをインライン要素から分離することもできます。

/// A [link][1] an an ![image][2]
///
/// ...
///
/// [1]: http://www.example.com
/// [2]: http://www.example.com/image.jpg


キーワード

Xcodeは、マークダウン形式に加えて、クイックヘルプで目立つように表示する他のマークアップキーワードを認識します。これらのマークアップキーワードのほとんどの形式は- <keyword>:(例外はparameterです。これにはコロンの前にパラメーター名も含まれます)。キーワード自体は大文字/小文字の任意の組み合わせで記述できます。

シンボルセクションキーワード

次のキーワードは、ヘルプビューアーの目立つセクションとして、[説明]セクションの下、および[宣言済み]セクションの上に表示されます。含めると、コメントに好きな順序で含めることができますが、その順序は以下に示すように固定されます。

セクションキーワードの完全に文書化されたリストとその使用目的は、 マークアップフォーマットリファレンスのシンボルセクションコマンドセクションを参照してください

/// - parameters:
///   - <#parameter name#>:
///   - <#parameter name#>:
/// - throws:
/// - returns:

または、次の方法で各パラメーターを記述できます。

/// - parameter <#parameter name#>:

シンボル説明フィールドキーワード

次のキーワードのリストは、ヘルプビューアーの[説明]セクションの本文に太字の見出しとして表示されます。これらは、「説明」セクションの残りの部分と同様に、記述した順序に関係なく表示されます。

Erica Sadunによる この優れたブログ記事 からの完全なリストの言い換え。 マークアップ書式設定リファレンスのシンボル説明フィールドコマンドセクションで、完全に文書化されたキーワードのリストとその使用目的も参照してください。

帰属:

/// - author:
/// - authors:
/// - copyright:
/// - date:

可用性:

/// - since:
/// - version:

忠告:

/// - attention:
/// - important:
/// - note:
/// - remark:
/// - warning:

開発状況:

/// - bug:
/// - todo:
/// - experiment:

実装品質:

/// - complexity:

機能的意味論:

/// - precondition:
/// - postcondition:
/// - requires:
/// - invariant:

クロスリファレンス:

/// - seealso:

ドキュメントのエクスポート

HTMLドキュメント(Apple独自のドキュメントを模倣するように設計されています)は、オープンソースのコマンドラインユーティリティである Jazzy を使用して、インラインドキュメントから生成できます。

$ [Sudo] gem install jazzy
$ jazzy
Running xcodebuild
Parsing ...
building site
jam out ♪♫ to your fresh new docs in `docs`

このNSHipsterの記事からのコンソールの例

364
Stuart

Xcode 6でSwiftコードをドキュメント化するために機能するものを次に示します。非常にバグが多く、コロンに敏感ですが、何もないよりはましです。

class Foo {

    /// This method does things.
    /// Here are the steps you should follow to use this method
    ///
    /// 1. Prepare your thing
    /// 2. Tell all your friends about the thing.
    /// 3. Call this method to do the thing.
    ///
    /// Here are some bullet points to remember
    ///
    /// * Do it right
    /// * Do it now
    /// * Don't run with scissors (unless it's tuesday)
    ///
    /// :param: name The name of the thing you want to do
    /// :returns: a message telling you we did the thing
    func doThing(name : String) -> String {
        return "Did the \(name) thing";
    }
}

上記は、書式設定された数値リスト、箇条書き、パラメーター、および戻り値のドキュメントで予想されるように、クイックヘルプで表示されます。

これらのいずれも文書化されていません-彼らを一緒に助けるためにレーダーを提出してください。

58
ShakenManChild

Xcode 8の新機能、このような方法を選択できます

func foo(bar: Int) -> String { ... }

次に、command + option + /を押すか、Xcodeの[エディター]メニューから"Structure"-"Add documentation"を選択すると、次のコメントテンプレートが生成されます。

/// <#Description#>
///
/// - parameter bar: <#bar description#>
///
/// - returns: <#return value description#>
36
Logan Jahnke

Swiftには、「///」コメント処理が含まれています(おそらくすべてではありませんが)。

次のように書きます:

/// Hey!
func bof(a: Int) {

}

次に、オプション名をクリックしてfunc名とvoilà:)

27
Jean Le Moignan

ShakenManChildがpeoprソリューションを提供したことを確認できます

説明の下に空の行があることを確認してください!

An invalid situation

Proper way

Another way

Another commenting style

11
D.A.H

はい。ベースコモン(Obj-Cと同等のスニペットを作成しました)

目的C:

/**
 @brief <#Short description - what it is doing#>

 @discussion <#Description#>

 @param  <#paramName#> <#Description#>.

 @return <#dataType#> <#Description#>.
 */

スイフト

/**
<#Short inline description - what it is doing#>

<#Description#>

:param:  <#paramName#> <#Description#>.

:returns: <#dataType#> <#Description#>.
*/
8
Jakub Truhlář

Swiftのみを使用している場合は、Jazzyを見る価値があります。

https://github.com/realm/jazzy

7
Ross Gibson

Xcodeバイナリを掘り下げて、何か面白いものを見つけました。末尾が.swiftdocのファイル。これらのファイルにはSwift UIKit/Foundation APIのドキュメントが含まれているため、ドキュメントが必ずあります。残念ながら、Xcodeのドキュメントビューアーで使用するための独自のファイル形式のようです。

6
Leandros

Xcode Editorで->構造->ドキュメントを追加

enter image description here

5
Abo3atef