在Xcode 8中,如果你声明一个类(或结构)符合一个协议,但是没有实现所需的方法(函数?),Xcode将给出这个消息" Type' ClassName
'不符合协议' ProtocolName
'"这是真的。
如果通过单击显示三角形打开错误,您将看到许多带有灰色感叹号图标的项目。每个项目都说"协议需要功能...你想添加一个存根吗?"我确实想添加一个存根!我怎么告诉它为我添加存根?
答案 0 :(得分:10)
raphh的答案是对的,但xcode在这里仍然是一个小小的错误(至少对我而言),
如果在将点标记转换为感叹号后没有选择Fix-it
,并且除非您尝试再次构建,否则无法再次显示它。
建成后: Dot error icon
当您不立即执行Fix-it
时:
exclamation mark error icon
当您有多种方法需要实施时,您必须重新构建以再次获取点图标,并且您确实为第一个方法执行了Fix-it
。
答案 1 :(得分:2)
答案 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.
}