【问题标题】:Xcode 8 says "Do you want to add a stub?" How do I answer?Xcode 8 说“你想添加一个存根吗?”我该如何回答?
【发布时间】:2016-10-04 13:25:18
【问题描述】:

在 Xcode 8 中,如果您声明一个类(或结构)符合协议,但尚未实现所需的方法(函数?) Xcode 将给出此消息“Type 'ClassName' does not conform to协议 'ProtocolName'" 是真的。

如果您通过单击显示三角形打开错误,您将看到许多带有灰色感叹号图标的项目。每个项目都说“协议需要功能......你想添加一个存根吗?”我确实想添加一个存根!如何告诉它为我添加存根?

【问题讨论】:

  • 这在 Xcode 9 中似乎好多了。

标签: xcode8


【解决方案1】:

raphh 的答案是对的,但是 xcode 在这里还是有点问题(至少对我来说),

如果您在将点号转换为感叹号后没有立即选择Fix-it,并且除非您尝试再构建一次,否则您无法再次出现。

在构建之后: Dot error icon

当您不立即执行 Fix-it 时: exclamation mark error icon

当您有几种方法可以实现并且您确实为第一种方法执行了Fix-it 时,您必须重新构建以再次获取点图标。

【讨论】:

  • 我有同样的问题,但我找不到“修复它”按钮。 REBUILD 后我终于找到按钮了!
【解决方案2】:

只需单击Fix-it,Xcode 就会为您添加您需要实现的方法的存根。

像这样。看 :

感谢 Xcode 8,终于!

【讨论】:

  • 如果您看到红色感叹号而不是 Fix-it,则通过单击问题导航器中的显示三角形来查找有关错误的更多信息。如果您看到有关“候选人不是函数”的内容,请先删除或注释掉该代码,然后会出现 Fix-it。
  • 在我的情况下,它一次又一次地显示添加我已经添加了 2 次的协议内容......
【解决方案3】:

是的,点击“修复”,xcode 会添加协议中提到的必要方法和变量,另外,Xcode 会在实现协议的类中添加具有适当读写权限的变量。

例如:在你的协议中如果你声明了一个 get,set 变量并且在你的结构/类中你声明它为'let'属性,那么 Xcode 会抛出一个错误说“你想添加一个协议存根” ,当您单击修复它时,它现在在协议遵守类/结构中添加“var”属性,用于协议中的 get、set 属性

protocol VoiceAssistant {
  var name: String {get}
  var voice: String {get set}
}

struct Siri: VoiceAssistant {

 var voice: String //xcode added this, when you click 'fix it' for protocol stub
 let name = "Siri"   

 let voice = "Voice" //added by me, Compilation Error: voice is not settable, but protocol requires it.
}

【讨论】:

  • 这个问题最初是关于 Xcode 8 的,但是在当前的 Xcode (9) 中这要好得多。
猜你喜欢
  • 2019-05-03
  • 2015-07-01
  • 1970-01-01
  • 2020-06-19
  • 2018-10-19
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
相关资源
最近更新 更多