在Objective C中,我可以使用#pragma mark来标记符号导航器中的代码片段。由于这是一个C预处理器命令,所以在Swift中不可用。在Swift中有替代品吗,或者我必须使用丑陋的评论吗?


当前回答

在Xcode 5之前,预处理器指令#pragma标记存在。

从Xcode 6开始,你必须使用// MARK:

这些预处理器特性允许为源代码编辑器的函数下拉框带来一些结构。

一些例子:

// MARK:

->前面有一个水平分隔符

// MARK: your text goes here

->在下拉列表中将“您的文本放在这里”以粗体显示

// MARK: - your text goes here

->在下拉列表中将“您的文本放在这里”以粗体显示,前面有一个水平分隔符

更新:增加了截图,因为有些人似乎仍然有问题:

其他回答

在Objective-C代码中,Xcode检测像// MARK: - foo这样的注释,它比#pragma更可移植。但这些似乎也没有被采纳(目前?)

编辑:在Xcode 6 beta 4中修复。

你可能也会对Swift 4.2 / XCode 10编译器指令感兴趣

#warning("Some string to display")

and

#error("Some error to display")

当你真的不想错过什么东西时,它可能会很有用。

有三个选项可以在Swift中添加#pragma_mark:

1) // MARK: -你的文字在这里-

2) // TODO: -你的文本在这里-

3) // FIXME: -你的文本在这里-

注意:用于添加分隔符

Xcode官方文档

苹果目前的官方文档部分为可见性注释代码引入了三个注释:TODO:, FIXME:和MARK:。

最新的Xcode版本(v14.2)支持另外两个注释(虽然没有出现在官方文档中):!!:和??

注意:! !:和??:被某些Xcode版本(如v10.0)不支持,原因未知。

示例截图1 - Xcode 14.2 + macOS 13.1 (Ventura)

示例截图2 - Xcode 10.1 + macOS 10.14.3 (Mojave)

苹果在最新版本的“构建可可应用程序”中表示,

Swift编译器不包括预处理器。相反,它需要 编译时属性、构建配置和 语言特性来完成相同的功能。对于这个 原因是,在Swift中不导入预处理器指令。

#字符似乎仍然是你处理各种构建配置和类似事情的方式,但看起来他们试图减少你对大多数预处理的需求,并将你转发到其他语言特性。也许这是为了帮助Playgrounds和REPL的操作尽可能接近完全编译的代码。