我可以在协议中使用init func吗?

问题描述:

当我试图实现我的方案是这样的:我可以在协议中使用init func吗?

protocol Serialization { 
    func init(key keyValue: String, jsonValue: String) 
} 

我收到一条错误消息:在函数声明预计标识符。

为什么我得到这个错误?

+0

为什么你想要一个协议呢?它为什么关心类型是如何创建的? – Mark 2014-09-05 22:52:09

+4

一个对象可以有多个init函数。为什么没有一个协议规定可以被调用? – 2014-09-06 00:29:38

+6

这是因为'init'前面的'func'关键字。删除它并再试一次。 – 2014-09-06 00:44:54

是的,你可以。但是你从来没有把func在前面的init:这里

protocol Serialization { 
    init(key keyValue: String, jsonValue: String) 
} 
+1

你能解释一下在init之前不把func的原因吗?谢谢。 – LiweiZ 2015-01-26 21:34:45

+4

@李维z:因为初始值和方法是分开的 – newacct 2015-01-26 21:36:24

+0

谢谢。我想我需要再次通过开发人员文档:) – LiweiZ 2015-01-27 01:36:30

要点:

  1. 的协议和实现它的类,从未有关键字funcinit方法的前面。
  2. 在您的班级中,由于您的协议中调用了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方法的前面。