在我打字的时候,我厌倦了Xcode多次使用现场“未使用的变量”警告。我一直在想我的语法错误,停止我正在做的事情,检查警告,只看到它是一个未使用的变量警告。
当然它未被使用,我只是键入它!
我不介意编译时未使用的变量警告,这些非常有用,但我在输入代码时讨厌实时警告。
有没有办法可以在任何地方完全关闭此警告,无论是应用程序范围还是整个项目?
答案 0 :(得分:15)
从目前看来,我们无法以#pragma clang diagnostic ...
可用于obj-C的方式来抑制特定警告。参见例如以下帖子
可以通过从 Xcode - &gt中禁用 显示实时问题 来全局禁用所有交互式警告 ;首选项:标签常规 。但是,这超过了禁用所有实时警告,也会禁用实时错误,所以我认为你不想诉诸这些错误。
[构建警告]您可以在项目范围内关闭自定义构建警告,如下所示:
答案 1 :(得分:0)
在我的版本(Xcode 10.2.1)上,似乎禁用实时警告只是禁用警告,而不是其他人所说的所有错误。因此,我认为这个确切的答案很好地解决了原始帖子:
Map<String, String> removeItems = new HashMap<>();
Map<String, Pair<String, Config>> allItems = new HashMap<>();
for(final Entity entity : entities) {
final Config config = Configs
.get(entity.getId());
if (config == null || entity.getTxId() == null) {
continue;
}
if (config.getTips() != null) {
for (final Tip tip : config.getTips()) {
String currentId = entity.getId();
String currentTipId = tip.getTipId();
if(allItems.containsKey(currentTipId)) {
Pair<String, Config> item = allItems.get(currentTipId);
if(tip.getPriority() > item.getValue().getPriority()) {
removeItems.put(currentTipId, item.getKey());
allItems.put(currentTipId, new Pair(currentId, tip));
} else {
removeItems.put(currentTipId, currentId);
}
} else {
allItems.put(currentTipId, new Pair(currentId, tip));
}
List<String> rejects = tip.getRejects();
if(CollectionUtils.isEmpty(rejects)) {
continue;
}
for (String reject : rejects) {
Pair<String, Config> pair = allItems.get(reject);
if (null != pair) {
String rejectId = pair.getKey();
if (StringUtils.isNotEmpty(rejectId)) {
removeItems.put(reject, rejectId);
}
}
}
}
}
}
取消选中“ Xcode > Preferences > General > Issues: [x] Show live issues
”。键入新代码时不再出现持续的警告。
答案 2 :(得分:-1)
@warn_unused_result
是Xcode 10(Swift 4.2)的默认行为。
默认情况下,“未使用的值”和“未使用的变量”警告也处于启用状态。
关闭它们不是一个好主意,这个answer显示了原因。
对于您自己的或被覆盖的函式,可以在声明中使用@discardableResult
指令来禁止显示以下警告:
请注意,doSubmission()不会生成任何警告。
实际上,这在某些系统API中使用,例如: 如果你写
navigationController?.popToRootViewController(animated: true)
代替
_ = navigationController?.popToRootViewController(animated: true)
您将不会收到忽略返回结果的警告。
使用_ = funcWithResultWeDoNotCareFor()
是IMHO的最佳做法。
顺便说一句,所有这些都适用于项目。在Playground中,无论如何,您都不会收到“未使用的值”和“未使用的变量”警告。