Swift有#warning等价物吗?它只是用于在Xcode自己的GUI中显示警告
我也对是否存在#error等价物感兴趣.
Apple已经表示#pragma mark即将推出,它可能与此相同.

Kyl*_*len 155
在未来,Apple开发者可能会很好地发布一个//WARNING:里程碑,或为另一个命名的地标提供功能.
然而,为了在今天的Xcode中使用Swift来启用这个功能,你可以按照Ben Dodson和Jeffrey Sambells的描述做以下事情:
将新的运行脚本添加到目标的构建阶段选项卡(项目设置>构建阶段>'+'>新运行脚本阶段),并将以下代码粘贴到空框中:
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/"
Run Code Online (Sandbox Code Playgroud)
这将强制Xcode在编译时为您标记的任何// TODO:或// FIXME:注释标记警告.
或者,您可以使用自定义标记修改TAGS: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
@ david-h在评论中提出了一个很好的观点.如果您只想在特定的构建配置中引发这些警告,则可以执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用"Release"而不是"Debug"来仅定位生产构建.
Jor*_*ith 146
编辑
从Swift 4.2开始,语言级支持可用于构建警告和错误.
#warning("Warning description")
#error("Throws a build error")
Run Code Online (Sandbox Code Playgroud)
原始答案
快速,肮脏,同时优雅简单哦.
// Description of what you need to fix
var FIX_ME__: AnyObject
Run Code Online (Sandbox Code Playgroud)
抛出警告"FIX_ME__"从未使用过.
如果你愿意,可以将表情符号添加到变量名中......我经常使用,对于真正需要修复的东西我甚至会考虑.您可以替换FIX_ME__使用任何你想要的:ALGORITHM_NEEDS_REVIEW,BugID_148或者JOHNNY_YOU_BROKE_THIS是一些例子.
快速,没有设置,简洁和表情符号甚至可以为您的代码添加幽默/个性.有时最简单的解决方案是最佳解决方案.
Jee*_*hut 77
从Xcode 10和Swift 4.2开始,您现在可以#warning再次使用:
#warning("TODO: Clean up this code after testing")
Run Code Online (Sandbox Code Playgroud)
这将在Xcode中像预期一样显示为警告!
这甚至与#if检查结合使用,例如,如果您的目标平台是iOS,则以下内容仅显示警告:
#if os(iOS)
#warning("this code is untested in iOS")
#endif
Run Code Online (Sandbox Code Playgroud)
#error如果您希望构建失败,也可以使用它.
在使用XCode 6的Swift中,您可以将不同类型的地标用于不同目的.以下是Apple对此的评价:
Xcode现在支持// MARK:,// TODO:和// FIXME:地标来注释你的代码并在跳转栏中列出它们.
因此,要设置带描述的警告,您可以使用以下内容:
//TODO: Clean up this code after testing
如果您只想设置一个短标记(假设您将记住该做什么),请使用:
//FIXME
编辑: 然而,这些地标只出现在XCode中的跳吧这可能不是你的愿望是什么,什么人会期望-尤其是从// TODO://和标志FIXME.我已经提出了一个雷达:#17776817.希望Apple将在XCode 6即将推出的版本中添加它.
SOLUTION(EDIT 2):
如果你通过自制安装斯威夫特短绒(运行brew install swiftlint后brew update添加)建议构建脚本到你的项目,那么你会看到所有TODO和FIXME地标出现在Xcode警告.SwiftLint甚至会添加一些警告/错误,您可以根据自己的需要进行配置 - 我只能推荐使用SwiftLint,它可以很好地解决这个问题!
int*_*upt 55
尚未被Apple团队添加.我决定做的可能是作弊,但至少它确实向我显示了FIXME消息.所以我要做的是在Swift文件中声明FIXME()函数:
@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}
Run Code Online (Sandbox Code Playgroud)
当我从任何其他功能调用它时,它确实显示警告,例如
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
FIXME() // Incomplete method implementation.
return 0
}
Run Code Online (Sandbox Code Playgroud)

对于Swift 2使用
@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
Run Code Online (Sandbox Code Playgroud)
kel*_*lin 42
看看这篇文章.
您可以编写自己的脚本,以突出显示所有标记.
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/"
Run Code Online (Sandbox Code Playgroud)
Ari*_*sky 12
作为替代方案,如果您希望在警告面板中显示某些内容,您可以编写如下内容:
if (false){
var x = 2;
}
Run Code Online (Sandbox Code Playgroud)
您无法真正显示任何文本,但至少它是一个更明显的标记,特别是如果您倾向于处理(大多数)警告,如错误.
我正在使用的一个CocoaPod .swift名称中,因此返回了一个目录,导致Kyle的脚本崩溃.添加-type f到该find命令通过仅查看匹配的文件*.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/"
Run Code Online (Sandbox Code Playgroud)
我提出并实现了这个功能,它将随Swift 4.2一起提供.您现在可以通过master在swift.org上下载工具链来使用它.
#if os(macOS)
#error("macOS is not supported")
#endif
#warning("finish this")
Run Code Online (Sandbox Code Playgroud)
经过大量的寻找和渴望,我确信这样的实体不存在。我仍然对最新的 Xcode 发行说明充满希望,其中提到持续缺乏 #pragma 标记机制,#warning 和 #error 也可能会出现。
顺便说一句,我强烈建议在bugreport.apple.com上向 Apple 提交 Radar以添加此功能(您可以欺骗 17702491)。
| 归档时间: |
|
| 查看次数: |
41711 次 |
| 最近记录: |