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_REVIEW
, BugID_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
脚本添加到项目中,那么你会看到所有的TODO
和FIXME
地标在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
它也有添加新标签的偏好