Xcode 8说"你想添加一个存根吗?"我该怎么回答?

时间:2016-10-04 13:25:18

标签: xcode8

在Xcode 8中,如果你声明一个类(或结构)符合一个协议,但是没有实现所需的方法(函数?),Xcode将给出这个消息" Type' ClassName'不符合协议' ProtocolName'"这是真的。

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

3 个答案:

答案 0 :(得分:10)

raphh的答案是对的,但xcode在这里仍然是一个小小的错误(至少对我而言),

如果在将点标记转换为感叹号后没有选择Fix-it,并且除非您尝试再次构建,否则无法再次显示它。

建成后: Dot error icon

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

当您有多种方法需要实施时,您必须重新构建以再次获取点图标,并且您确实为第一个方法执行了Fix-it

答案 1 :(得分:2)

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

喜欢这个。见: enter image description here

最后谢谢Xcode 8!

答案 2 :(得分:0)

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

例如:在您的协议中,如果您声明了一个get,set变量,并且在您的struct / class中,您将其声明为' 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.
}