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)
II。 TODO: //TODO: - viewDidLoad
这将在TODO下分组function: – viewDidLoad类别(如屏幕截图2所示)
III。 FIXME: //FIXME - viewDidLoad
这将在FIXME下分组function: – viewDidLoad类别(截图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注释。
- //#MARK: – 文字方法(LINE)
- //#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 -
注:使用-
将添加分隔符