在Objective C中,我可以使用#pragma mark来标记符号导航器中的代码片段。由于这是一个C预处理器命令,所以在Swift中不可用。在Swift中有替代品吗,或者我必须使用丑陋的评论吗?
当前回答
我认为Extensions是一个更好的方式而不是#pragma mark。
使用扩展前的代码:
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) {
...
}
}
使用扩展后的代码:
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) {
...
}
}
其他回答
专业程序员必须使用这个标签来获得好的代码。 这对团队合作也有好处。
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
像这样的方法很容易找到
在Objective-C代码中,Xcode检测像// MARK: - foo这样的注释,它比#pragma更可移植。但这些似乎也没有被采纳(目前?)
编辑:在Xcode 6 beta 4中修复。
苹果在最新版本的“构建可可应用程序”中表示,
Swift编译器不包括预处理器。相反,它需要 编译时属性、构建配置和 语言特性来完成相同的功能。对于这个 原因是,在Swift中不导入预处理器指令。
#字符似乎仍然是你处理各种构建配置和类似事情的方式,但看起来他们试图减少你对大多数预处理的需求,并将你转发到其他语言特性。也许这是为了帮助Playgrounds和REPL的操作尽可能接近完全编译的代码。
在Xcode 5之前,预处理器指令#pragma标记存在。
从Xcode 6开始,你必须使用// MARK:
这些预处理器特性允许为源代码编辑器的函数下拉框带来一些结构。
一些例子:
// MARK:
->前面有一个水平分隔符
// MARK: your text goes here
->在下拉列表中将“您的文本放在这里”以粗体显示
// MARK: - your text goes here
->在下拉列表中将“您的文本放在这里”以粗体显示,前面有一个水平分隔符
更新:增加了截图,因为有些人似乎仍然有问题:
//# MARK: - Spinner Class Methods
在冒号和描述之间添加一行,以插入分隔线。这有助于更好地组织代码。上面的代码和截图使用了包含一行的MARK注释。
//#标记:-文本方法(LINE) //#标记:文本方法(NO LINE)
这只适用于MARK注释。