OK, this is a bit confusing the first time you run into it. The lack of "Decodable" conformance actually has nothing to do with the "booDelegate" property.
— Without this property, all the remaining properties (well, just one of them) is Codable, so the compiler can synthesize Codable conformance for your custom class. That includes synthesizing all the requirements of Decodable. No error.
— With this property, the compiler doesn't know how to encode or decode the property, so it can't synthesize conformance to Codable for the class. So it doesn't. Since you haven't satisfied all of the Decodable protocol requirements, you get an error.
In this case, the thing you're missing is an "init(from:)" method, which is a Decodable requirement.
The simplest way to fix this is to constrain your protocol to have Codable conformance:
protocol ExampleProtocol: Codable {
func foo()
}
(Note: I "fixed" your protocol name to start with an uppercase letter, as it should.)
That will force any type that conforms to ExampleProtocol to also conform to Codable, and that in turn will satisfy the compiler that your "BooClass" (again, not "booClass", please?) also conforms to Codable.
If you don't want to do this, then you will have to implement Decodable explicitly, which means you will need to write your own "init(from:)" method.
Note that this error message has an associated "fixit", where the compiler will offer to add stubs for missing protocol methods. That's a good way to find out what's missing, even if you're eventually going to delete the stubs and use synthesized conformance.