我可以在协议中使用init func吗?
问题描述:
当我试图实现我的方案是这样的:我可以在协议中使用init func吗?
protocol Serialization {
func init(key keyValue: String, jsonValue: String)
}
我收到一条错误消息:在函数声明预计标识符。
为什么我得到这个错误?
答
要点:
- 的协议和实现它的类,从未有关键字
func
在init
方法的前面。 - 在您的班级中,由于您的协议中调用了
init
方法,因此您现在需要在init
方法前加上关键字required
的前缀。这表明你遵守的协议要求你有这个方法(即使你可能独立地认为这是一个好主意)。
所涵盖的其他人,你的方案应该是这样的:
protocol Serialization {
init(key keyValue: String, jsonValue: String)
}
而且作为一个例子,就是符合该协议的类看起来可能是这样:
class Person: Serialization {
required init(key keyValue: String, jsonValue: String) {
// your logic here
}
}
公告要求需要关键字在init
方法的前面。
为什么你想要一个协议呢?它为什么关心类型是如何创建的? – Mark 2014-09-05 22:52:09
一个对象可以有多个init函数。为什么没有一个协议规定可以被调用? – 2014-09-06 00:29:38
这是因为'init'前面的'func'关键字。删除它并再试一次。 – 2014-09-06 00:44:54