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

时间:2014-09-05 21:42:31

标签: swift

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

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

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

为什么我收到此错误?

2 个答案:

答案 0 :(得分:86)

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

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

答案 1 :(得分:26)

要点:

  1. 协议和实现它的类,从不func方法前面有关键字init
  2. 在您的课程中,由于您的协议中调出了init方法,因此您现在需要在init方法前加上关键字required。这表明您遵守的协议要求您使用此init方法(即使您可能已经独立地认为这是一个好主意)。
  3. 正如其他人所述,您的协议将如下所示:

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

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

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

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

相关问题