73

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

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

我收到一条错误消息:函数声明中的预期标识符。

为什么我会收到此错误?

4

2 回答 2

125

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

protocol Serialization {
    init(key keyValue: String, jsonValue: String)
}
于 2014-09-06T01:58:40.750 回答
37

这里的要点:

  1. 协议和实现它的类,永远不要func在方法前面有关键字init
  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
    }
}

注意方法前面的requiredinit关键字。

于 2015-06-20T19:58:56.330 回答