Swift中的#pragma标记?

在Objective C中,我可以使用#pragma mark在符号导航器中标记我的代码的各个部分。 由于这是一个C预处理器命令,因此在Swift中不可用。 在Swift中有没有这样的替身,还是我不得不使用丑陋的评论?

您可以使用// MARK:


历史,在Xcode 6 Beta 4之前

在WWDC刚刚和一位工程师交谈,目前Xcode的beta版本并没有实现

// MARK:

风格呢,但我被告知未来的版本会。

也有人认为,自由使用课堂延伸可能是一个更好的做法。 由于扩展可以实现协议,因此可以将所有的表视图委托方法放在一个扩展中,并将代码放在比#pragma mark更有意义的层次上。

对于那些有兴趣使用扩展名和编译标记的人(如第一条评论所述),下面是如何从Swift Engineer实现它:

 import UIKit class SwiftTableViewController: UITableViewController { init(coder aDecoder: NSCoder!) { super.init(coder: aDecoder) } override func viewDidLoad() { super.viewDidLoad() } } extension SwiftTableViewController { override func numberOfSectionsInTableView(tableView: UITableView?) -> Int { return 1 } override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int { return 5 } override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? { let cell = tableView?.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell; cell.textLabel.text = "Hello World" return cell } } 

这也不一定是最好的做法,但如果你喜欢,这就是你如何做的。

直到Xcode 5预处理器指令#pragma mark存在。

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

这些预处理器function允许将某些结构带入源代码编辑器的function下拉框。

一些例子 :

 // MARK: 

– >之前会有一个水平分隔符

 // MARK: your text goes here 

– >在下拉列表中以粗体显示“您的文字在这里”

 // MARK: - your text goes here 

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

更新:添加截图“导致一些人似乎仍然有这个问题:

在这里输入图像说明

Pragma mark - [SOME TEXT HERE] Objective-C中的 Pragma mark - [SOME TEXT HERE]用于通过行分隔将几个函数组合在一起

Swift中,您可以使用MARK, TODO OR FIXME来实现这一点

一世。 MARK: //MARK: viewDidLoad

这将创build一个水平线 ,在viewDidLoad下分组(见截图1)

截图1

II。 TODO: //TODO: - viewDidLoad

这将在TODO下分组function: – viewDidLoad类别(如屏幕截图2所示)

截图2

III。 FIXME: //FIXME - viewDidLoad

这将在FIXME下分组function: – viewDidLoad类别(截图3所示)

截图3

在Objective-C代码中,Xcode检测像// MARK: - foo这样的注释// MARK: - foo#pragma更便于移植。 但是这些似乎也没有被拾起(还?)。

编辑:修正在Xcode 6testing版4。

我认为Extensions是一个更好的方式,而不是#pragma mark

使用Extensions之前的代码:

 class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { ... func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { ... } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { ... } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { ... } } 

使用Extensions后的代码:

 class ViewController: UIViewController { ... } extension ViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { ... } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { ... } } extension ViewController: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { ... } } 

在今天上午在WWDC的一个苹果工程师的确认,目前没有任何#pragma或等价物,他们认为这是一个错误,它会很快到达,所以我猜测testing版2,我希望。

无论如何,这是在路上。


Xcode现在支持// MARK :, // TODO:和// FIXME地标来注释你的代码,并在跳转列表中列出它们

现在Xcode 8按照下面的方法处理它,并在方法下拉菜单中显示:

在这里输入图像说明

使用

 // MARK: SectionName 

要么

 // MARK: - SectionName 

这将会在编译标记上面留下一行,使其更具可读性。

为了便于添加

 // MARK: - <#label#> 

到你的代码片段。

替代方法 –

以这种方式使用它

 private typealias SectionName = ViewController private extension SectionName { // Your methods } 

这不仅会增加标记(就像编译标记一样),还会很好地分离代码。

 //# MARK: - Spinner Class Methods 

在冒号和描述之间添加一行以插入分隔线。 这有助于组织您的代码更多。 上面的代码和屏幕截图利用包含一行的MARK注释。

  1. //#MARK: – 文字方法(LINE)
  2. //#MARK:文字方法(NO LINE)

这只适用于MARK评论。

在这里输入图像说明

//MARK:在Xcode 6.3.2中似乎不适用于我。 但是,这是我做的,以使其工作

1)代码:

 import Cocoa class MainWindowController: NSWindowController { //MARK: - My cool methods func fly() { } func turnInvisible() { } } 

2)在jump bar添加//MARK :注释时,没有任何内容会改变。 但是,如果我点击跳转栏中最右边的名字,在我的情况下,它说MainWindowController(with a leading C icon) ,然后popup窗口将显示显示/ MARK:comment的效果,即标题“我很酷的方法”:

在这里输入图像说明

3)我也注意到,如果我点击我的代码中的一个方法,那么方法成为跳转条中最右边的条目。 为了让MainWindowController(with a leading C icon)成为跳转条中最右边的条目,我必须点击我的方法上面的空格。

专业程序员必须使用这个标签来获得更好的代码。 这对团队合作也很有帮助。

 // MARK: example Web Service start here // TODO: example 1 // FIXME: Please change BASE url before live 

很容易找到这样的方法

苹果在最新版本的cocoa应用程序中声明

Swift编译器不包含预处理器。 相反,它利用编译时间属性,构buildconfiguration和语言function来实现相同的function。 由于这个原因,预处理器指令不能在Swift中导入。

#字符似乎仍然是你如何使用各种构buildconfiguration和类似的东西,但它看起来像他们试图减less对大多数预处理的需要在编译的脉络,并转发给其他语言function。 也许这是为了帮助Playgrounds和REPL尽可能接近完全编译的代码的操作。

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

1) // MARK: - your text here -

2) // TODO: - your text here -

3) // FIXME: - your text here -

注:使用-将添加分隔符