【问题标题】:Does Swift have documentation generation support?Swift 是否支持文档生成?
【发布时间】:2014-07-25 17:26:02
【问题描述】:

许多语言都支持documentation cmets,以允许生成器(如javadocdoxygen)通过解析相同的代码来生成代码文档。

Swift 有这样的类型文档注释功能吗?

【问题讨论】:

  • 知道Xcode with objective-c 允许文档cmets,相信不久的将来苹果会在Xcode with swift 中加入这个选项(不过,这只是一个假设,我没有证据)跨度>
  • @Δdeveloper 我也是这么想的,但由于我没有看到任何参考资料,我想知道是否有人可以确认它,以及是否会有任何特定的文档工具。
  • 他们肯定会在未来添加一些东西,// MARK: 评论也计划用于未来的 Xcode 版本。
  • Doxygen 风格的 cmets 类似于类方法的工作,有 ~ 几个 ~ 很多警告。我将继续使用 Doxygen 风格(就像我对 Obj-C 所做的那样)并希望 Xcode 改进对这些风格的支持。
  • 有关记录块参数,请参阅stackoverflow.com/a/41970146/1054573

标签: swift documentation-generation


【解决方案1】:

Xcode 原生支持文档 cmets,在快速帮助中生成巧妙呈现的文档(无论是在 单击符号时的弹出窗口中,还是在快速帮助检查器 ⌥⌘2 kbd>)。

符号文档 cmets 现在基于丰富的 Playground cmets 使用的相同 Markdown syntax,因此您可以在 Playground 中执行的许多操作现在可以直接在源代码文档中使用。

有关语法的完整详细信息,请参阅Markup Formatting Reference。请注意,丰富的游乐场 cmets 和符号文档的语法之间存在一些差异;这些都在文档中指出(例如,块引号只能在游乐场中使用)。

下面是一个示例和当前适用于符号文档 cmets 的语法元素列表。


更新

Xcode 7 beta 4 ~ 添加了“- Throws: ...”作为顶级列表项,它出现在快速帮助中的参数和返回描述旁边。

Xcode 7 beta 1 ~ Swift 2 对语法的一些重大更改 - 文档 cmets 现在基于 Markdown(与 Playgrounds 相同)。

Xcode 6.3 (6D570) ~ 缩进文本现在被格式化为代码块,随后的缩进被嵌套。似乎不可能在这样的代码块中留下空白行 - 尝试这样做会导致文本被添加到包含任何字符的最后一行的末尾。

Xcode 6.3 beta ~现在可以使用反引号将内联代码添加到文档 cmets。


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 2 的语法(基于 Markdown


评论风格

///(内联)和/** */(块)样式 cmets 都支持生成文档 cmets。虽然我个人更喜欢 /** */ cmets 的视觉风格,但 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)
///    }

至少需要四个空格的缩进。


内联元素

强调(斜体):

/// 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 保存在一个可管理的位置:

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


关键词

除了 Markdown 格式,Xcode 还可以识别其他标记关键字以在快速帮助中突出显示。这些标记关键字大多采用- <keyword>:格式(parameter除外,它还包括冒号前的参数名称),其中关键字本身可以用大小写字符的任意组合编写。

符号部分关键字

以下关键字在帮助查看器中显示为突出部分,位于“说明”部分下方和“声明于”部分上方。包含后,它们的顺序固定如下所示,即使您可以按照您喜欢的任何顺序将它们包含在 cmets 中。

Symbol Section Commands section of the Markup Formatting Reference 中查看完整记录的部分关键字列表及其预期用途。

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

或者,您可以这样编写每个参数:

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

符号描述字段关键字

以下关键字列表在帮助查看器的“说明”部分的正文中显示为粗体标题。它们将按照您编写它们的任何顺序出现,与“描述”部分的其余部分一样。

由 Erica Sadun 从this excellent blog article 转述的完整列表。另请参阅Symbol Description Field Commands section of the Markup Formatting Reference 中完整记录的关键字列表及其预期用途。

归因:

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

可用性:

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

告诫:

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

发展状况:

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

实施质量:

/// - complexity:

功能语义:

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

交叉引用:

/// - seealso:

 导出文档

可以使用开源命令行实用程序 Jazzy 从内联文档生成 HTML 文档(旨在模仿 Apple 自己的文档)。

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

来自this NSHipster article的控制台示例

【讨论】:

  • 看起来行为在 Xcode 6.3 (6D570) 的最终版本中发生了变化。缩进的块现在被格式化为代码块,并且可以嵌套两个以上的级别。
  • 对 Swift 2.0 文档语法的非常好的描述。您应该更新帖子以包含 /// - todo: keyword
  • @uchuugaka 实际上没有。它之前可能基于 reStructuredText,但从 Xcode 7 文档开始,cmets 是基于 Markdown 的,与 Playground cmets 具有相同的基本格式。详情请参阅Xcode 7 Release Notes
  • 有没有办法像 JavaDoc 那样链接到同一个文件中的其他函数?例如,“请参阅myOtherMethod(param1:) 了解扩展功能”
  • @BenLeggiero,是的,通过使用/// - Tag: otherMethod[otherMethod](x-source-tag://otherMethod)。更多详情,请参阅my answer
【解决方案2】:

这里有一些可以在 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";
    }
}

上面的内容在快速帮助中呈现,正如您对格式化数字列表、项目符号、参数和返回值文档的期望一样。

这些都没有记录 - 提交雷达以帮助他们。

【讨论】:

  • 马特汤普森写了an article about this,他认为这是reStructuredText
  • 在上面的示例中,除了显示的星号之外,加号 (+) 和减号 (-) 符号也将用作项目符号。
  • 似乎任何解释性文本和:param::returns: 行之间都需要一个空白注释(///)行。省略它会导致 XCode(撰写本文时为 6.1.1)在函数描述的主体中包含参数帮助。
  • 不幸的是,这不适用于 Xcode 7 Beta。希望他们会在发布版本中修复它。
【解决方案3】:

Xcode 8 中的新功能,您可以选择这样的方法

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

然后按command + option + / 或从Xcode的“编辑器”菜单中选择“结构”-“添加文档”,它会为您生成以下 cmets 模板:

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

【讨论】:

  • 谢谢。我只想提一下,您指出的键盘快捷键似乎不适用于丹麦语键盘,其中“/”是 shift-“7”。
【解决方案4】:

Swift 包括“///”注释处理(虽然可能还不是全部)。

这样写:

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

}

然后选项-单击函数名称,瞧:)

【讨论】:

    【解决方案5】:

    我可以确认 ShakenManChild 提供了个人解决方案

    请确保说明下方有一个空行!

    【讨论】:

      【解决方案6】:

      是的。 Base common(我用 Obj-C 等价物为它制作了 sn-ps)

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

      【讨论】:

        【解决方案7】:

        如果你只使用 Swift,那么 Jazzy 值得一看。

        https://github.com/realm/jazzy

        【讨论】:

        【解决方案8】:

        在 Xcode 编辑器中 -> 结构 -> 添加文档。

        【讨论】:

        【解决方案9】:

        我在 Xcode 二进制文件中发现了一些有趣的东西。以.swiftdoc 结尾的文件。 它肯定有文档,因为这些文件包含 Swift UIKit / Foundation API 的文档,不幸的是,它似乎是一种专有文件格式,可在 Xcode 的文档查看器中使用。

        【讨论】:

          【解决方案10】:

          Jazzy 可以帮助生成漂亮的苹果风格文档。 这是一个示例应用程序,详细介绍了如何快速使用和配置。

          https://github.com/SumitKr88/SwiftDocumentationUsingJazzy

          【讨论】:

            【解决方案11】:

            也许关注 AppleDoc 或 Apple 自己的 HeaderDoc 是一个好主意,这不是很受欢迎。 我仍然可以在 10.9 Mavericks 终端 (headerdoc2html) 中找到一些 HeaderDoc 提示

            我建议阅读最新的“What's New In Xcode”*(不确定它是否仍在保密协议下) *该链接指向 Xcode 5.1 版本,其中也包含有关 HeaderDoc 的信息。

            【讨论】:

              【解决方案12】:

              从 Xcode 5.0 开始,支持 Doxygen 和 HeaderDoc 结构化 cmets。

              Source

              【讨论】:

              • 好吧,在这种情况下,我问的是 Swift。
              • @pconcepcion 你在 Xcode 中使用 Swift 吗?那么是的。
              • Matt,据我所知(我可能错了)Swift 直到 Xcode 6 beta 才被支持,所以我不确定 Xcode 5 的文档是否适用于 Xcode 6(以及然后是斯威夫特)
              • @pconcepcion 它有效。我一直在使用与在 Objective-C 中使用的相同样式的 doxygen 文档,并且它有效。在方法或属性上方,我使用/// This is what the method does. 等。
              • 好的,那么问题是你已经在 Xcode 6 上测试过了。我很困惑,因为你在谈论 Xcode 5 而链接是 Xcode 5
              猜你喜欢
              • 1970-01-01
              • 2016-01-12
              • 1970-01-01
              • 1970-01-01
              • 2021-02-08
              • 1970-01-01
              • 1970-01-01
              • 2015-03-26
              • 2018-07-13
              相关资源
              最近更新 更多