如何使用Swift文档注释

99

我有几个关于Swift文档注释的问题:

  1. 是否有办法创建一个“相关声明”(Related declarations)部分,就像一些苹果官方文档中的那样?例如,当我使用 Option+Click 点击 tablewView(_:heightForRowAtIndexPath:) 方法时,它会在生成的文档中链接到另外三个相关方法。

  2. Swift 中有警告标签吗?我知道 Objective-C 允许我使用 @warning 来获得粗体突出的警告信息。然而,在 Swift 的文档注释中使用 :warning: 并不起作用,所以我想知道是否还有其他方式。

  3. 是否有办法将我的文档注释制作成一个类似苹果官方文档格式的 HTML 文件?我知道在其他 IDE(如 Eclipse)中,我可以为我的代码生成 HTML 文档,那么 XCode 是否也有这个功能呢?


可能是Swift是否有文档注释或工具?的重复问题。 - Stuart
2
Swift的注释在这些年里发生了变化,使用CMD+OPTION+/快捷键,Xcode会为所有所需文档(包括返回值、参数等)添加模板。它可以是扩展、类、方法等。这样你就可以保证使用官方的文档格式/风格。 - rgkobashi
请参阅苹果公司有关此功能的描述,在源文件中编写符号文档 - Rob
6个回答

223

本回答最后修订于 Swift 5.7 和 Xcode 14.x。


DocC 是苹果的文档编译器,它接收注释(以及其他资源),并生成可以在Xcode中查看或托管在Web上的丰富文档。

编写文档

输入////** */开始文档注释, 然后使用 DocC 的Markdown 特殊方言编写内容。该方言支持许多关键字,如 - Parameters: 描述函数参数或 - Returns: 描述返回值。

请注意, > Warning: 关键字被识别为旁注并自动强调。 DocC 支持多种其他旁注类型,如 NoteTipImportant

/// Produce a greeting string for the given `subject`.
///
/// ```
/// print(hello("world")) // "Hello, world!"
/// ```
///
/// > Warning: The returned greeting is not localized. To
/// > produce a localized string, use ``localizedHello(_:)``
/// > instead.
///
/// - Parameters:
///     - subject: The subject to be welcomed.
///
/// - Returns: A greeting for the given `subject`.
func hello(_ subject: String) -> String {
    return "Hello, \(subject)!"
}

链接符号

DocC会自动链接(并自动完成!)用双反引号``包围的符号。您可以在同一类型或同一模块中链接到相关符号。

请注意,链接仅限于公共符号,并且仅限于一个模块。截至今天,没有办法输入“UIView”等内容,让DocC自动将其链接到UIKit文档。

生成网页

DocC支持将您的文档导出为网页。首先,您需要通过选择产品→构建文档来编译您的文档。构建文档后,单击“More”按钮导出其存档。存档将包含整个文档网页,您可以将其托管在您的服务器上。

以上过程有点复杂,因此有许多工具可帮助您自动化。Apple提供了swift-docc-plugin,您可以将其添加到Swift包或Xcode项目中,并配置它在每次构建时运行。您也可以在CI上自动化此过程。

进一步阅读

我建议阅读以下指南以了解有关DocC的更多信息:


@akashivskyy 如果这个被添加到一个动态的Swift框架中,它会在公共接口中被移除。因此使用该框架的项目无法查看这些文档。有什么解决办法吗? - adev
@adev 我无法复现你所写的内容。我将一个预编译的 .framework 添加到我的项目中,cmd 点击一个符号,所有原始文档注释都可用。 - akashivskyy
@akashivskyy 这很奇怪。我不知道 Carthage 在将我的框架添加到应用程序时是否会剥离某些内容。 - adev
@adev 我在上面的测试中也使用了 Carthage。 - akashivskyy
答案中的链接现在在页面顶部声明了以下内容:“重要提示本文档不再更新。有关 Apple SDK 的最新信息,请访问文档网站。” 有人知道这个信息现在被保存在哪里吗?我在苹果提供的链接 https://developer.apple.com/documentation 上搜索没有找到任何结果。 - Michael Welch

62

Xcode 7.0 beta 4

标注已更改 :param: 不再起作用...)

/// Creates the string representation of the poo with requested size.
///
/// - warning: Be carefull! Poos can hurt.
/// - parameter size: requested size of the poo
/// - returns: string representation of the poo
func makePoo(size: String) -> String
{
    return "Ouch. This is \(size) poo!"
}

它看起来像这样:

文档弹出窗口

您可以使用////** */


2
这个答案必须出现 - Saranjith
如果将此内容添加到动态 Swift 框架中,则会在公共接口中删除。因此,使用该框架的项目无法查看这些文档。有什么解决方法吗? - adev

44
对于那些想要将此作为代码片段添加的人。Swift 5,XCode 11.3+。这是Yogendra Singh在本主题中的答案的补充。
/**
<#Summay text for documentation#>

- parameter <#parameterName#>: <#Description#>.
- returns: <#Return values#>
- warning: <#Warning if any#>


 # Notes: #
 1. <#Notes if any#>

 # Example #
```
 // <#Example code if any#>
```

*/

复制并粘贴上述代码到Xcode中。选择代码然后右击。

enter image description here

保存代码片段并将完成名称命名为文档。

enter image description here

现在,如果我们开始输入文档,代码补全会显示片段。

enter image description here


回应我的评论@YogendraSingh,我发现似乎无论你做什么,当上下文显示文档注释时,Swift都会自动添加一个名为“Discussion”的空部分--甚至可以在他提供的上下文弹出窗口截图中看到这个空的“Discussion”部分与他提供的文档注释相匹配。更糟糕的是,我一直没有找到如何在文档注释中定义“Discussion”部分的方法。如果可能的话,您能否修改您的代码片段以包括执行此操作的方法? - Le Mot Juiced
@YogendraSingh已经给出了他的答案,但不幸的是,当我尝试将其应用到代码片段中时,它并没有起作用,我也不确定原因。如果您能根据他的回答更新您的答案,那将非常有帮助。当然,我们都很忙,如果这是一个低优先级的问题,我也理解。 - Le Mot Juiced
1
这有点晚了,但请检查您是否在完成字段(第三行)中输入了“文档”。 - Jia Cheng Sun

11

使用以下符号来编写文档注释。

/**
 This method sum two double numbers and returns.

 Here is the discussion. This methods adds two double and return the optional Double.


 - parameter number1: First Double Number.
 - parameter number2: Second Double Number.
 - returns: The sum of two double numbers.

 # Notes: #
 1. Parameters must be **double** type
 2. Handle return type because it is optional.

 # Example #
```
 if let sum = self.add(number1: 23, number2: 34) {
  print(sum)
 }
 ```
*/


func add(number1: Double, number2: Double) -> Double? {
    return number1 + number2
}

enter image description here


如果您查看文档注释结果的图片,您会发现在“Declaration”下面有一个名为“Discussion”的部分是完全空白的。我发现Swift几乎总是添加这个空的“Discussion”区域,而且我发现几乎不可能找到如何在注释中定义“Discussion”区域。如果您可以修改您的示例以演示这一点,我认为它将帮助很多人避免错误。 - Le Mot Juiced
2
总结之后,留出一行空白,接下来您所写的内容将作为讨论,请勿使用任何特殊字符(如“-”等)。我已编辑了我的答案,请查看。 - Yogendra Singh

8

Xcode中的键盘快捷方式

option + cmd + /

5

(3) 为了生成HTML文档(甚至生成docsets),我强烈推荐使用专门为此目的而建的jazzy

尽管它仍在进行中,但它的功能非常强大,并且可以生成类似于Apple文档的漂亮的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接