In Objective-C when you declare an instance variable you can check if it conforms to a protocol on assignment at compile time like so:
id <MyProtocol> variable;
Is it possible to check whether an object assigned to the variable conforms to two separate protocols at compile time? As in:
id <MyProtocol, MyOtherProtocol> variable;
I know I can do runtime checking using conformsToProtocol:
and respondsToSelector
et al, (which I do before actually using the object for added safety), and I could write my own setter method that does the check, but I'd like to know at compile time.
You can’t always check protocol conformance in compile-time because an object of (non-qualified) type
id
is always a valid object from the compiler’s perspective. For instance,That being said,
<P1, P2>
will give you warnings in case the object doesn’t conform to both protocols if that can be known at compile-time:I think the best is to use your own code:
And before calling a method, check if the variable responds to what you want to call:
Since Objective-C is a dynamic language, just declaring the variable protocol can't assure that it conforms to the protocol. It'll mostly generates warnings when you build.
Yes, that syntax is correct.
The correct way to check if an object conforms to a protocol is to do this:
Note that this works as both an instance method and a class method.
If for some bizarre reason you can't use the
conformsToProtocol:
, you can drop down to the runtime level: