提问人:Arbitur 提问时间:6/3/2014 最后编辑:rolling_codesArbitur 更新时间:1/23/2023 访问量:252180
#pragma Swift 中的标记?
#pragma mark in Swift?
问:
在目标 C 中,我可用于在符号导航器中标记代码的各个部分。由于这是一个 C 预处理器命令,因此在 Swift 中不可用。在 Swift 中是否有替身,或者我必须使用丑陋的评论?#pragma mark
答:
在 Objective-C 代码中,Xcode 会检测注释,例如 which 比 .但这些似乎也没有被捡起来(还没有?// MARK: - foo
#pragma
编辑:在Xcode 6 beta 4中修复。
评论
// MARK: -
// MARK:
苹果在最新版本的Building Cocoa Apps中指出,
Swift 编译器不包括预处理器。相反,它需要 编译时属性、构建配置和 语言功能来实现相同的功能。为此 原因,预处理器指令不会导入 Swift。
# 字符似乎仍然是您使用各种构建配置和类似内容的方式,但看起来他们试图减少您对编译指示的大多数预处理的需求,并将您完全转发到其他语言功能。也许这是为了帮助 Playground 的运行,并且 REPL 的行为尽可能接近完全编译的代码。
你可以使用// MARK:
也有人讨论说,无论如何,自由使用类扩展可能是一种更好的做法。由于扩展可以实现协议,因此您可以例如将所有表视图委托方法放在扩展中,并在语义级别上对代码进行分组。#pragma mark
评论
// MARK:
// TODO:
// FIXME
#pragma mark
-
MARK
MARK
#pragma mark
// MARK: -
// MARK: - stuff
// MARK: - stuff -
对于那些对使用扩展与编译指示标记感兴趣的人(如第一条评论中提到的),以下是 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
}
}
这也不一定是最佳实践,但如果你愿意,这就是你的做法。
评论
typealias
typealias DataSource = SwiftTableViewController
extension Datasource {}
UITableViewController
UITableViewControllerDataSource
extension
extension SwiftTableViewController : UITableViewController
extension SwiftTableViewController : UITableViewDelegate { .. }
extension SwiftTableViewController : UITableViewDatasource { .. }
今天早上在WWDC上与Swift实验室的苹果工程师确认,目前没有任何 #pragma 或等效产品,他们认为这是一个错误,它很快就会到来,所以我猜测beta 2,我希望。
无论如何,它正在路上。
Xcode 现在支持 //MARK:、//TODO: 和 //FIXME 地标来注释你的代码和 在跳转栏中列出它们
评论
我认为扩展
是更好的方法,而不是.#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) {
...
}
}
评论
extension
直到 Xcode 5 之前,预处理器指令都存在。#pragma mark
从 Xcode 6 开始,您必须使用// MARK:
这些预处理器功能允许为源代码编辑器的函数下拉框带来一些结构。
一些例子:
// MARK:
->前面将有一个水平分隔线
// MARK: your text goes here
->下拉列表中以粗体显示“您的文本转到此处”
// MARK: - your text goes here
->下拉列表中以粗体显示“您的文本在这里”,前面是水平分隔符
更新:添加了屏幕截图,因为有些人似乎仍然对此有问题:
评论
// MARK: - text
//MARK:
在 Xcode 6.3.2 中似乎对我不起作用。但是,这是我为使其工作所做的:
1)代码:
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
2)在添加:注释时似乎没有任何变化。但是,如果我单击跳转栏中最右边的名称,在我的情况下,它说 ,然后将显示一个弹出窗口,显示 //MARK: 注释的效果,即一个标题,上面写着“我的很酷的方法”:jump bar
//MARK
MainWindowController(with a leading C icon)
3)我还注意到,如果我单击代码中的一个方法,那么该方法将成为跳转栏中最右边的条目。为了成为跳转栏中最右边的条目,我必须单击方法上方的空白。MainWindowController(with a leading C icon)
评论
Pragma mark - [SOME TEXT HERE]
在 Objective-C 中用于通过行分隔将多个函数组合在一起。
在 Swift 中,你可以使用MARK, TODO OR FIXME
i. 标记: //MARK: viewDidLoad
这将创建一条水平线,其中函数分组在 viewDidLoad 下(如屏幕截图 1 所示)
ii. 待办事项: //TODO: - viewDidLoad
这会将函数分组到 TODO 下: - viewDidLoad 类别(如屏幕截图 2 所示)
iii. 修复: //FIXME - viewDidLoad
这将在 FIXME 下对函数进行分组: - viewDidLoad 类别(如屏幕截图 3 所示)
有关详细信息,请查看此 Apple 文档。
评论
//# MARK: - Spinner Class Methods
在冒号和说明之间添加一行以插入分隔线。这有助于进一步组织您的代码。上面的代码和屏幕截图使用了包含一行的 MARK 注释。
- # MARK: – 文本方法 (LINE)
- # MARK: 文本方法(无行)
这仅适用于 MARK 注释。
Xcode 8 现在按如下方式处理它,并在方法下拉列表中显示如下:
评论
// ARK:
!!!
???
用
// MARK: SectionName
或
// MARK: - SectionName
这将在编译指示标记上方给出一行,使其更具可读性。
为方便起见,只需添加
// MARK: - <#label#>
添加到您的代码片段中。
替代方式 -
以这种方式使用它
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
这不仅会添加标记(就像编译指示标记一样),还可以很好地隔离代码。
评论
//MARK
// MARK: (text)
//
MARK
:
:
专业程序员必须使用此标签才能获得良好的代码。 它也有利于团队合作。
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
很容易找到这样的方法
在 Swift 中可以添加三个选项:#pragma_mark
1)// MARK: - your text here -
2)// TODO: - your text here -
3)// FIXME: - your text here -
注意:用于添加分隔符-
Xcode 官方文档
Apple 当前的官方文档部分 注释代码以提高可见性 引入了三个注释:、 和 。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)
评论
???
!!!
添加待办事项:插入带有前缀 TODO: 的注释。为 example: // 待办事项: [你的待办事项]。
添加错误修复提醒:插入带有前缀 FIXME: 的注释。为 example: // FIXME: [你的错误修复提醒]。
添加标题:插入带有前缀 MARK: 的注释。例如: 马克:[你的章节标题]。
添加分隔线:要在注释上方添加分隔符,请添加 批注的注释部分前的连字符 (-)。例如: 马克: - [你的内容]。要在批注下方添加分隔符,请添加 批注注释部分后面的连字符 (-)。为 example: // MARK: [your content] -.
您可能还对 Swift 4.2 / XCode 10 编译器指令感兴趣,例如
#warning("Some string to display")
和
#error("Some error to display")
当您真的不想错过某些内容时,它可能会很有用。
评论
试试这个:
// MARK: Reload TableView
func reloadTableView(){
tableView.reload()
}
编译指示标记是一种提高代码可读性的方法。编译指示注释将像 Xcode 跳转栏上的标签一样显示。
//MARK: <Your comment goes here>
示例:在代码中,
//MARK: Properties
// MARK: View Life cycle
//MARK: Helper methods
这就是它在 Xcode 跳转栏中的显示方式。
评论
在 Xcode 11 中,他们添加了可以激活的小地图。Editor -> Minimap
小地图将显示每个标记文本,以便在代码中快速定位。
每个标记都写成这样// MARK: Variables
评论