我可以在协议中有一个init函数吗?
当我试图通过这种方式来实现我的协议:
protocol Serialization { func init(key keyValue: String, jsonValue: String) }
我得到一个错误说: 函数声明中的预期标识符。
为什么我得到这个错误?
是的你可以。 但是你从来没有把func
放在init
:
protocol Serialization { init(key keyValue: String, jsonValue: String) }
要点在这里:
- 协议和实现它的类在
init
方法之前从不具有关键字func
。 - 在你的类中,由于你的协议中调用了
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
方法前面的必需关键字。