Swift:相当于#warning

Swift是否有相同的#warning? 它只是用来在Xcode自己的GUI中显示警告

我也感兴趣是否有一个#error等价物。

苹果已经表示#pragma标记即将推出,可能与此相同。

在这里输入图像说明

未来,苹果开发者可能会很好地发布//WARNING:地标,或者提供另一个命名地标的function。

然而,今天在Xcode中使用Swift来启用这个function,你可以按照Ben Dodson&Jeffrey Sambells的描述来完成以下工作:

将新的运行脚本添加到目标的构build阶段选项卡(项目设置>构build阶段>'+'>新的运行脚本阶段),并将以下代码粘贴到空框中:

 TAGS="TODO:|FIXME:" echo "searching ${SRCROOT} for ${TAGS}" find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" 

这将迫使Xcode在编译时为所有// TODO:或者// FIXME:标记注释标记警告。

另外,你也可以用自定义标签来修改标签: TAGS="WARNING:"在上面的代码中可以保留TODO&FIXME的默认行为,并且会在任何标注为“ // WARNING:注释上发出编译时警告。

http://bendodson.com/weblog/2014/10/02/showing-todo-as-warning-in-swift-xcode-project/ http://jeffreysambells.com/2013/01/31/generate-xcode-警告-从-待办事项-评论;

编辑:18/11/14

@戴维·h在他的评论中提出了一个好的观点。 如果您只想在特定的构buildconfiguration中引发这些警告,则可以执行以下操作:

 if [ "${CONFIGURATION}" = "Debug" ]; then TAGS="TODO:|FIXME:" echo "searching ${SRCROOT} for ${TAGS}" find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" fi 

或者,您可以使用“发布”而不是“debugging”来定位生产版本。

快速,肮脏,哦,所以在同一时间优雅简单。

 // Description of what you need to fix var FIX_ME__🛠🛠🛠: AnyObject 

抛出“FIX_ME__🛠🛠🛠”从未使用过的警告。

如果你喜欢,你可以添加表情符号到variables名…我经常使用😱和🛠,对于需要修复的东西,我甚至会考虑💩。 你可以用你想要的来代替FIX_ME__ALGORITHM_NEEDS_REVIEWBugID_148或者JOHNNY_YOU_BROKE_THIS就是一些例子。

快速,没有设置,简洁,表情符号甚至可以添加幽默/个性的代码。 有时最简单的解决scheme是最好的解决scheme。

还没有被苹果团队添加。 我决定做的可能是作弊,但至less它确实给我一个FIXME的信息。 所以我所做的是在Swift文件中声明FIXME()函数:

 @availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**") func FIXME() { } 

当我从任何其他function调用它时,它会显示一个警告,例如

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { FIXME() // Incomplete method implementation. return 0 } 

在这里输入图像说明

对于Swift 2使用

 @available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**") 

在使用XCode 6的Swift中,您可以使用不同types的地标用于不同的目的。 以下是苹果对此的评价:

Xcode现在支持// MARK :, // TODO:和// FIXME: 地标来标注你的代码,并在跳转列表中列出它们。

因此,为了设置一个警告与描述,你会使用这样的事情:

//TODO: Clean up this code after testing

如果你只是想设置一个短标记(假设你会记得要做什么),使用这个:

//FIXME

编辑:然而,这些地标只出现在XCode的跳转栏,这可能不是你想要的和期望的 – 尤其是从/ TODO:和/ / FIXME标记。 我已经提交了一个雷达:#17776817。 希望苹果将在XCode 6的即将到来的版本中join这个。

解决scheme(编辑2):如果你通过Homebrew安装Swift Linter(在brew update后运行brew install swiftlint ),并将build议的 brew install swiftlint 脚本添加到项目中,那么你会看到所有的TODOFIXME地标在Xcode中显示为警告。 SwiftLint甚至会添加一些你可以configuration的警告/错误来适应你的需求 – 我只能推荐使用SwiftLint,它可以很好地解决这个问题!

看这篇文章 。

你可以编写你自己的脚本来突出显示所有的标签。

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

这导致: 在这里输入图像说明

或者,如果您想在警告面板中显示某些内容,则可以编写如下所示的内容:

 if (false){ var x = 2; } 

你不能真正得到任何文本显示,但至less是一个更明显的标记,特别是如果你倾向于(像)错误一样处理(大部分)警告。

我使用的一个CocoaPod的名字是.swift ,所以一个目录被返回,导致Kyle的脚本崩溃。 在find命令中添加-type f可以通过查看匹配*.swift文件来修复这个问题,而不是返回匹配模式的目录。

我使用的最终代码:

 TAGS="TODO:|FIXME:" echo "searching ${SRCROOT} for ${TAGS}" find "${SRCROOT}" \( -name "*.swift" \) -type f -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" 

经过多次寻找和渴望,我确信没有这样的实体存在。 我仍然希望最新的Xcode发行说明提到继续缺less#pragma标记机制,#warning和#error也可能会出现。

另外,我强烈build议在bugreport.apple.com上向苹果公司提交一个雷达,以增加这个function(你可以使用17702491)。

如果您不想调整您的构build设置,另一个简单的家庭补救措施是将一个编辑器占位符粘贴在评论前:

 <#todo#>// stop and fixme! 

编译时会出现“源文件中的编辑器占位符”错误,但与乔丹的解决scheme不同的是,input时不会出现实时错误:

编辑占位符

我们编写了一个可configuration的工具,让您可以在Xcode Issue Navigator中根据注释标记和构buildconfiguration放置警告和错误: https : //github.com/doubleencore/XcodeIssueGenerator

安装它:

 brew tap doubleencore/tap brew install xcodeissuegenerator 

然后在运行脚本构build阶段放置一行:

 # Mark WARNINGs, SERIOUSs, and TODOs as warnings in DEBUG builds excluding the Vendor and Third Party directories. XcodeIssueGenerator -b DEBUG -w "WARNING, SERIOUS, TODO" -x "Vendor/, Third Party/" 

这里有一篇文章描述我们如何使用它。

我的回答并不完全符合你的问题,但是如果你想要一些简单的东西,你可以使用这个 恶魔恶魔插件,它可以在所有的项目中工作,不需要额外的准备。 只要做到以下几点:

 1) install Alcatraz (Nice package manager for Xcode Plug-ins) by entering this line in terminal: curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh 2) Then restart Xcode and on it launch agree to install all bundles not included in Xcode 3) In Xcode select menu item -> Window -> Package manager -> type in search panel XTodo and press install 4) Relaunch Xcode and again agree to install additional bundles 5) From now press Ctrl + T and you will see all Tags in nice window 

它也有添加新标签的偏好

在这里输入图像说明