如何在Xcode中标记“待办事项”注释?


111

目前,我正在基于iOS的图像处理任务。

问题:

我正在研究不同的模块。因此,如果以后需要在模块中添加某些内容,则希望将其标记为“待办事项”。在Xcode中还有其他宏或类似的要添加注释吗?

我试过了:

为此,我目前正在使用#pragma像:

#pragma mark -
#pragma mark To do: Add the Image processing methods.

我有:

但它在“方法”部分列出如下:

去做

我真正需要的是:

问题是,它列在方法列表下,因此有时我忘记从本节中删除它,而且很难在整个源代码中找到它。(搜索#pragma结果以显示整个列表)

技术细节:

我正在使用Xcode版本4.6.2。


我如何到达Xcode列出所有方法,编译指示和TODO注释的特定视图?
Mischa 2014年

@Mischa:检查我的答案,它在方法列表栏中。
Midhun MP 2014年

我确实检查了您的答案,但没有找到提示如何显示该弹出窗口。但是我想我现在发现了它:它位于“导航”栏中的代码编辑器顶部,对吗?
Mischa 2014年

顺便说一句:有没有办法一次显示项目的所有待办事项?
Mischa 2014年

@Mischa:是的,它位于代码编辑器的顶部,据我所知,无法一次显示所有要做的注释(而不是搜索整个项目)
Midhun MP 2014年

Answers:


133

我知道了。

像这样写评论:

// TODO: Do something

会成功的。

我得到类似:

去做


也有很多选择,例如

  1. // FIXME: Midhun

  2. // ???: Midhun

  3. // !!!: Midhun

  4. // MARK: Midhun

16
您还可以使用// FIXME:或#warning。使用#warning时,您会在Xcode中收到一条警告,可以直接跳至该部分。
brush51 2013年

6
@ Dev2rights在您发出一个小时之前发布的内容不是吗?你为什么不接受他的回答?
trojanfoe

@trojanfoe:是的。但是我有一个更合适的解决方案// MARK:和#warning。这就是为什么我不接受它的原因
Midhun MP

1
好了// FIXME// MARK并且与和#warning并不相同// TODO,因此无法回答您的问题。
trojanfoe

1
@Domsou:除了列出的选项,目前没有其他可用的选项。如果有的话,我会更新答案。
Midhun MP

129
// TODO: the thing todo

是如何显示待办任务。


10
您还可以使用// FIX: Everything crashes all the time它来简化返回到使用跳转栏产生问题的代码部分的过程。
Maarten 2013年

奇怪的是使用这并不表明在XCode中5.1.1的注释
loretoparisi


3
Nitpick:在//和之间放置一个空格TODO:。例如: // TODO: Read this from prefs。如果您查看Swift和Objective C语言的文档,则始终遵循该空间约定。
杰夫罗

43

使用

//TODO: some thing here

如果您要做的就是查看下拉列表中的待办事项列表,则可以使用

如果您想打扰您,可以改用#warning标记:

#warning this will create a compiler warning.

而且,在构建应用程序时,您会收到一个编译器警告(黄色三角形,而不是编译器错误),它在提醒您您需要做的事情时多了一些。


我认为这#warning是最好的解决方案,因为它会在编译时警告您。谢谢
鸭子

36

使用下面的脚本,您可以看到所有必需的标签,例如警告。

  1. 在项目浏览器中选择项目
  2. 在边栏中打开目标,然后移至“构建阶段”标签
  3. 点击“ +”号
  4. 选择“新运行脚本构建阶段” 脚本添加
  5. 将以下脚本添加到“运行脚本”中 准备好的脚本 的脚本:

    KEYWORDS="TODO:|FIXME:|DevTeam:|XXX:"
    find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/"

在此处输入图片说明

原始答案来自此处

另一个选择是Xcode的XToDo插件。


很棒的解决方案,有没有办法排除所有Pod文件?我使用的扩展程序中有几个Todos oder Mixmes?
马可·韦伯

在这篇文章中找到了自己的解决方案stackoverflow.com/q/37157027/6003494脚本是:KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:" find "." \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -not -path "./Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/"
Marco Weber


6

我开始

// TODO: Implement bubble sort

然后,我加入了一个大型项目,有时我需要一个待办事项才能比WIP提交的寿命更长,因此为了将我的待办事项与同龄人区分开来,我将待办事项命名为首字母缩写:

// TODO: SM: Implement bubble sort

有时我想提高可见度,所以我开始在某些地方使用实用警告。

#warning Implement bubble sort

有一天,我决定通过添加-Werror自己的标志来打开硬模式。不幸的是,这会使编译指示变得无用,因为它们会阻止编译。所以我回到使用// TODO:状态,直到Jeff Nadeau告诉我可以放

-Wno-error=#warnings

在我的标志中,以免将杂注警告视为错误。所以,现在#warning-Werror可沿侧对方生活。


3

我倾向于准确地写//// TODO:等等等等

然后,我只是执行COMMAND-SHIFT-F并查找“ // TODO”。

使用文件大纲下拉列表将只显示当前文件的TODO,但是我倾向于查看项目的TODO状态。

粗略的解决方案,但确实可以做到。


2

我将识别出的标记分为“警告和错误”供我自己使用,以为我会在这里共享它:

KEYWORDS="STUB:|WARNING:|TODO:|FIXME:|DevTeam:|\?\?\?:" 
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -not -path "${SRCROOT}/Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/1: warning: \$1/"

KEYWORDS="ERROR:|XXX:|\!\!\!:" 
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -not -path "${SRCROOT}/Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/1: error: \$1/"
ERROR_OUTPUT=`find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -not -path "${SRCROOT}/Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/1: error: \$1/"`

exit ${#ERROR_OUTPUT}

0

另一个简单的方法是,如果您不想使方法列表栏混乱不堪,那就是在框外,如果要在注释中使用约定,//Todo:并且当您要在批处理中解决它们时,只需选择“查找导航器”,“区分大小写”并搜索//Todo:

我更喜欢这种方式,因为我不喜欢方法看起来像spagetti代码。是的,我经常有很多Todo:'s;)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.