我可以在协议中有一个init函数吗?

当我试图通过这种方式来实现我的协议:

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

我得到一个错误说: 函数声明中的预期标识符。

为什么我得到这个错误?

是的你可以。 但是你从来没有把func放在init

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

要点在这里:

  1. 协议和实现它的类在init方法之前从不具有关键字func
  2. 在你的类中,由于你的协议中调用了init方法,所以你现在需要在init方法的前面添加required的关键字。 这表明你遵守的协议要求你有这个init方法(即使你可能独立地认为这是一个好主意)。

正如其他人所说,你的协议看起来是这样的:

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

作为一个例子,符合这个协议的类可能看起来像这样:

 class Person: Serialization { required init(key keyValue: String, jsonValue: String) { // your logic here } } 

注意init方法前面的必需关键字。