键入

时间:2016-01-21 18:46:29

标签: swift xcode7 compiler-warnings

在我打字的时候,我厌倦了Xcode多次使用现场“未使用的变量”警告。我一直在想我的语法错误,停止我正在做的事情,检查警告,只看到它是一个未使用的变量警告。

enter image description here

当然它未被使用,我只是键入它!

我不介意编译时未使用的变量警告,这些非常有用,但我在输入代码时讨厌实时警告。

有没有办法可以在任何地方完全关闭此警告,无论是应用程序范围还是整个项目?

3 个答案:

答案 0 :(得分:15)

从目前看来,我们无法以#pragma clang diagnostic ...可用于obj-C的方式来抑制特定警告。参见例如以下帖子

可以通过从 Xcode - &gt中禁用 显示实时问题 来全局禁用所有交互式警告 ;首选项:标签常规 。但是,这超过了禁用所有实时警告,也会禁用实时错误,所以我认为你不想诉诸这些错误。

[构建警告]您可以在项目范围内关闭自定义构建警告,如下所示:

  • 在导航器中选择您的项目,然后选择标签 构建设置 。找到 Apple LLVM 7.0 - 警告 - 所有语言 ,并停用 未使用值 <的警告strong>未使用的变量

enter image description here

答案 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指令来禁止显示以下警告:

suppressing Unused Values warning with discardableResult directive

请注意,doSubmission()不会生成任何警告。

实际上,这在某些系统API中使用,例如: 如果你写

navigationController?.popToRootViewController(animated: true)

代替

_ = navigationController?.popToRootViewController(animated: true)

您将不会收到忽略返回结果的警告。

使用_ = funcWithResultWeDoNotCareFor()是IMHO的最佳做法。

顺便说一句,所有这些都适用于项目。在Playground中,无论如何,您都不会收到“未使用的值”和“未使用的变量”警告。