在Objective C中,我可以使用#pragma mark来标记符号导航器中的代码片段。由于这是一个C预处理器命令,所以在Swift中不可用。在Swift中有替代品吗,或者我必须使用丑陋的评论吗?
当前回答
专业程序员必须使用这个标签来获得好的代码。 这对团队合作也有好处。
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
像这样的方法很容易找到
其他回答
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)
//# MARK: - Spinner Class Methods
在冒号和描述之间添加一行,以插入分隔线。这有助于更好地组织代码。上面的代码和截图使用了包含一行的MARK注释。
//#标记:-文本方法(LINE) //#标记:文本方法(NO LINE)
这只适用于MARK注释。
你可能也会对Swift 4.2 / XCode 10编译器指令感兴趣
#warning("Some string to display")
and
#error("Some error to display")
当你真的不想错过什么东西时,它可能会很有用。
你可以使用// MARK:
也有讨论认为,自由使用类扩展可能是一种更好的实践。由于扩展可以实现协议,例如,你可以把你所有的表视图委托方法放在一个扩展中,并将你的代码分组在一个比#pragma mark更语义的级别上。
对于那些对使用扩展和pragma标记感兴趣的人(如第一条评论所述),下面是如何从Swift工程师实现它:
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
}
}
这也不一定是最佳实践,但如果您愿意,可以这样做。