Can I have an init func in a protocol?
When I try to implement my protocol this way:
protocol Serialization {
func init(key keyValue: String, jsonValue: String)
}
I get an error saying: Expected identifier in function declaration.
Why am I getting this error?
Yes you can. But you never put func
in front of init
:
protocol Serialization {
init(key keyValue: String, jsonValue: String)
}
Key points here:
- The protocol and the class that implements it, never have the keyword
func
in front of theinit
method. - In your class, since the
init
method was called out in your protocol, you now need to prefix theinit
method with the keywordrequired
. This indicates that a protocol you conform to required you to have thisinit
method (even though you may have independently thought that it was a great idea).
As covered by others, your protocol would look like this:
protocol Serialization {
init(key keyValue: String, jsonValue: String)
}
And as an example, a class that conforms to this protocol might look like so:
class Person: Serialization {
required init(key keyValue: String, jsonValue: String) {
// your logic here
}
}
Notice the required keyword in front of the init
method.