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

Aar*_*her 55 protocols initialization swift swift-protocols

当我尝试以这种方式实现我的协议时:

protocol Serialization {
    func init(key keyValue: String, jsonValue: String)
}
Run Code Online (Sandbox Code Playgroud)

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

为什么我收到此错误?

new*_*cct 94

是的你可以.但你永远不会放在func前面init:

protocol Serialization {
    init(key keyValue: String, jsonValue: String)
}
Run Code Online (Sandbox Code Playgroud)

  • @LiweiZ:因为初始化器和方法是分开的 (4认同)
  • 好吧,Swift因其风格一致性而闻名,这对于newbs非常不一致和困惑.谢谢你的回答. (3认同)

idS*_*tar 26

要点:

  1. 协议和实现它的类永远不会funcinit方法前面有关键字.
  2. 在您的类中,由于该init方法在您的协议中被调用,您现在需要在init方法前面加上关键字required.这表明您遵守的协议要求您使用此init方法(即使您可能已经独立地认为这是一个好主意).

如其他人所述,您的协议将如下所示:

protocol Serialization {
    init(key keyValue: String, jsonValue: String)
}
Run Code Online (Sandbox Code Playgroud)

例如,符合此协议的类可能如下所示:

class Person: Serialization {
    required init(key keyValue: String, jsonValue: String) {
       // your logic here
    }
}
Run Code Online (Sandbox Code Playgroud)

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