Swiftはドキュメント生成をサポートしていますか?


238

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

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


Objective-cを使用したXcodeがドキュメントのコメントを許可することを知っているため、Appleはこのオプションを近い将来にXcodeに追加する予定です(ただし、これは単なる仮説であり、証拠はありません)
Garoal

@Δdeveloper私は同じことを想定していましたが、参照をまったく見なかったので、誰かがそれを確認できるかどうか、また特定のドキュメントツールがあるかどうか疑問に思っていました。
pconcepcion 2014年

1
彼らは間違いなく将来的に何かを追加するでしょう、// MARK:コメントは将来のXcodeバージョンにも予定されています。
Leandros、2014年

Doxygenスタイルのコメントは、クラスメソッドの一種の作業で、〜いくつかの〜多くの警告があります。私は(Obj-Cのように)Doxygenスタイルを使い続け、Xcodeがそれらのサポートを改善することを願っています。
Pascal

1
ブロックパラメータの文書化については、stackoverflow.com
Leonard Pauli

回答:


386

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

シンボルドキュメントのコメントは、豊富なプレイグラウンドコメントで使用されているものと同じMarkdown構文に基づいているため、プレイグラウンドで実行できる多くの操作をソースコードドキュメントで直接使用できるようになりました。

構文の詳細については、「マークアップフォーマットのリファレンス」を参照してください。豊富な遊び場のコメントとシンボルのドキュメントの構文には、いくつかの相違点があることに注意してください。これらはドキュメントで指摘されています(たとえば、ブロック引用は遊び場でのみ使用できます)。

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


アップデート

Xcode 7ベータ4〜- Throws: ...」を最上位のリストアイテムとして追加しました。これはパラメーターと共に表示され、クイックヘルプの説明を返します。

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

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ドキュメンテーションクイックヘルプ


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は、すべてのURLを1つの管理可能な場所に保持するために、インライン要素から分離することもできます。

/// 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#>:

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

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

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

帰属:

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

可用性:

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

警告:

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

開発状態:

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

実装品質:

/// - complexity:

機能的意味論:

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

クロスリファレンス:

/// - seealso:

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

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

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

このNSHipsterの記事から引用したコンソールの例


1
Xcode 6.3(6D570)の最終バージョンで動作が変更されたようです。インデントされたブロックはコードのブロックとしてフォーマットされ、3つ以上のレベルでネストすることができます。
NexD。

2
Swift 2.0のドキュメント構文の非常に優れた説明。投稿を更新して、/// - todo: keyword
Leonardo

2
@uchuugaka実際にはありません。以前はreStructuredTextに基づいていた可能性がありますが、Xcode 7のドキュメントのコメントはMarkdownに基づいており、基本的な形式はプレイグラウンドのコメントと同じです。詳細については、Xcode 7リリースノートを参照してください。
Stuart

2
JavaDocのように、同じファイル内の他の関数にリンクする方法はありますか?たとえば、「myOtherMethod(param1:)拡張機能を見る」
Ben Leggiero

1
@BenLeggiero、はい、/// - Tag: otherMethodおよびを使用し[otherMethod](x-source-tag://otherMethod)ます。詳細については、私の回答を参照しください。
クレイエリス

58

Xcode 6で迅速なコードを文書化するために役立ついくつかのことを次に示します。これは非常にバグが多く、コロンに敏感ですが、何もしないよりはましです。

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

上記は、フォーマットされた数値リスト、箇条書き、パラメーター、および戻り値のドキュメントで期待されるように、クイックヘルプでレンダリングされます。

これは文書化されていません-それらを支援するためにレーダーを提出してください。


2
Matt Thompsonがこれについての記事を書いていてこれはそうだと彼は考えていreStructuredTextます。
Eonil 2014

上記の例では、プラス(+)およびマイナス(-)記号は、表示されているアスタリスクに加えて、箇条書きとしても機能します。
ヴィンス・オサリバン

///説明テキストと:param:or :returns:行の間に空白のコメント()行が必要なようです。これを省略すると、XCode(執筆時点では6.1.1)が関数の説明の本文にパラメーターのヘルプを含めます。
Robin Macharg、2015年

残念ながら、これはXcode 7 Betaでは機能しません。うまくいけば、彼らはリリース版でそれを修正するでしょう。
stevo.mit


41

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

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

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

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

これをありがとう。ここで指摘するキーボードショートカットはデンマーク語のキーボードでは機能しないようです。 "/"はShift- "7"です。
RenniePet 16

27

Swiftには "///"コメント処理が含まれています(ただし、まだすべてではないかもしれません)。

次のようなものを書いてください:

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

}

次に、オプション名をクリックしてfunc名とボイラを作成します:)


11

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

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

無効な状況

適切な方法

別の方法

別のコメントスタイル


8

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

Objective-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#>.
*/


6

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




-1

AppleDocや、あまり認識されていないApple独自のHeaderDocに目を向けることは良い考えかもしれません。10.9 Mavericksターミナル(headerdoc2html)で一部のHeaderDocヒ​​ントを見つけることができます

最新の「Xcodeの新機能」を読むことをお勧めします(まだNDAの下にあるかどうかは不明です)*このリンクは、HeaderDocに関する情報も含まれているXcode 5.1バージョンを指しています。


-1

Xcode 5.0以降、DoxygenおよびHeaderDoc構造化コメントがサポートされています。

ソース


1
この場合、Swiftについて質問していました。
pconcepcion 2014

@pconcepcion XcodeでSwiftを使用していますか?その後はい。
Matt Zanchelli、2014

1
マット、私が知っていることから(私は間違っているかもしれません)SwiftはXcode 6ベータ版までサポートされていないため、Xcode 5のドキュメントがXcode 6(そしてSwift)に有効かどうかはわかりません
pconcepcion

@pconcepcion動作します。私はObjective-Cで行ったのと同じスタイルのdoxygenドキュメントを使用してきました。メソッドまたはプロパティの上で、私は/// This is what the method does.等を使用します
Matt Zanchelli 2014

わかりました、それはあなたがXcode 6でそれをテストしたということです。あなたがXcode 5について話していて、リンクがXcode 5のためであるので私は混乱しました
pconcepcion
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.