在Objective C中,我可以用来#pragma mark
在符号导航器中标记我的代码部分.由于这是一个C预处理器命令,因此在Swift中不可用.在Swift中是否有替代,或者我是否必须使用丑陋的评论?
Fra*_*itt 1170
您可以使用 // MARK:
还有人讨论过,无论如何,自由使用类扩展可能是更好的做法.由于扩展可以实现协议,因此您可以将所有表视图委托方法放在扩展中,并将代码分组到比#pragma mark
能够更加语义的级别.
Ron*_*ers 168
直到Xcode 5,#pragma mark
存在预处理器指令.
从Xcode 6开始,您必须使用 // MARK:
这些预处理器功能允许将一些结构带到源代码编辑器的功能下拉框中.
一些例子 :
// MARK:
Run Code Online (Sandbox Code Playgroud)
- >前面会有一个水平分隔符
// MARK: your text goes here
Run Code Online (Sandbox Code Playgroud)
- >在下拉列表中以粗体显示"你的文字在这里"
// MARK: - your text goes here
Run Code Online (Sandbox Code Playgroud)
- >在下拉列表中以粗体显示"你的文字在这里",前面是水平分隔符
更新:添加截图'因为有些人似乎仍然有这个问题:
Nat*_*bot 167
对于那些对使用扩展与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
}
}
Run Code Online (Sandbox Code Playgroud)
它也不一定是最好的做法,但如果你愿意,这就是你如何做到的.
Jay*_*bey 114
Pragma mark - [SOME TEXT HERE]
在Objective-C中使用了通过线分离将几个功能组合在一起.
在Swift中你可以使用它MARK, TODO OR FIXME
一世.MARK: //MARK: viewDidLoad
这将创建一个水平线,其功能分组在viewDidLoad下(如屏幕截图1所示)
II.去做 : //TODO: - viewDidLoad
这将在TODO下分组功能: - viewDidLoad类别(如屏幕截图2所示)
III.整我 : //FIXME - viewDidLoad
这将在FIXME下分组功能: - viewDidLoad类别(如屏幕截图3所示)
Nik*_*uhe 56
在Objective-C代码中,Xcode检测的评论// MARK: - foo
比它更便携#pragma
.但这些似乎也没有被提升(但是?).
编辑:已在Xcode 6 beta 4中修复.
jqg*_*imo 36
我认为这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) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
使用后的代码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) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*iel 34
今天早上在WWDC上与Swift实验室的Apple工程师确认目前没有任何#pragma或同等版本,他们认为这是一个错误,它很快就会到来,所以我猜测测试2,我希望.
无论如何,它就在它的路上.
Xcode现在支持// MARK:,// TODO:和// FIXME地标来注释你的代码并在跳转栏中列出它们
Jay*_*dip 19
#pragma_mark
在Swift中有三个选项可供添加:
1) // MARK: - your text here -
2) // TODO: - your text here -
3) // FIXME: - your text here -
注意: -
用于添加分隔符
Nik*_*ure 17
使用
// MARK: SectionName
Run Code Online (Sandbox Code Playgroud)
要么
// MARK: - SectionName
Run Code Online (Sandbox Code Playgroud)
这将在pragma标记之上给出一行,使其更具可读性.
为了方便添加
// MARK: - <#label#>
Run Code Online (Sandbox Code Playgroud)
到你的代码片段.
替代方式 -
以这种方式使用它
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
Run Code Online (Sandbox Code Playgroud)
这不仅会添加标记(就像编译标记一样),而且还可以很好地隔离代码.
aas*_*sya 13
//# MARK: - Spinner Class Methods
Run Code Online (Sandbox Code Playgroud)
在冒号和描述之间添加一行以插入分隔线.这有助于进一步组织代码.上面的代码和屏幕截图使用包含一行的MARK注释.
这仅适用于MARK注释.
few*_*ode 10
您可能也对Swift 4.2/XCode 10编译器指令感兴趣
#warning("Some string to display")
Run Code Online (Sandbox Code Playgroud)
和
#error("Some error to display")
Run Code Online (Sandbox Code Playgroud)
当你真的不想错过任何东西时,它可能会有用.
专业程序员必须使用此标记才能获得良好的代码.这对团队合作也很有帮助.
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
Run Code Online (Sandbox Code Playgroud)
很容易找到这样的方法
小智 9
在 Xcode 11 中,他们添加了可以激活的小地图Editor -> Minimap
。
Minimap 将显示每个标记文本以在代码中快速定位。每个标记都写成// MARK: Variables
Apple 在最新版本的Building Cocoa Apps中表示,
Swift 编译器不包含预处理器。相反,它利用编译时属性、构建配置和语言功能来完成相同的功能。因此,预处理器指令不会导入到 Swift 中。
# 字符似乎仍然是您使用各种构建配置和类似内容的方式,但看起来他们正在尝试减少您对编译指示的大部分预处理的需求,并将您完全转向其他语言功能。也许这是为了帮助 Playgrounds 的操作和 REPL 的行为尽可能接近完全编译的代码。
//MARK:
在Xcode 6.3.2中似乎不适合我.但是,这就是我为了让它发挥作用而做的事情:
1)代码:
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
Run Code Online (Sandbox Code Playgroud)
2)在jump bar
添加//MARK
:comment 时,似乎没有任何变化.但是,如果我单击跳转栏中最右边的名称,在我的情况下它MainWindowController(with a leading C icon)
会显示,然后会显示一个弹出窗口,显示// MARK:comment的效果,即标题为"我的酷方法":
3)我还注意到,如果我单击代码中的一个方法,那么该方法将成为跳转栏中最右边的条目.为了MainWindowController(with a leading C icon)
成为跳转栏中最右边的条目,我必须单击我方法上方的空白区域.
归档时间: |
|
查看次数: |
214109 次 |
最近记录: |