Is there an Objective-C equivalent of C++’s dynamic_cast?
It can be faked using this:
MyClass *safeObject = [object isKindOfClass: [MyClass class]]
? (MyClass *)originalObject : nil;
But this is a lot of code to type, even if I don’t need to type it often.
I am a bit rusty so this might not be quite right, but I believe the equivalent in C++ would be:
MyClass safeObject = dynamic_cast<MyClass>(orginalObject);
The context here is a block where the parameter is defined as a type of a more generic class, but in this block I “know” it’s a specific subclass. Nevertheless, I don’t want to just cast it blindly with (MyClass *)originalObject and ignore a theoretically possible error.
To be clear, while I’d love a dynamic_cast, I’d be happy with an alternate approach to safely handle this case as well.
If you’re willing to use Objective-C++, you can write this pretty easily:
This should behave exactly as
dynamic_cast<>except for obj-c objects.If you want to stick with vanilla Obj-C you can get similar behavior with a class method on
NSObject:This version just isn’t as nice to use since you have to say something like
In both versions the resulting value is
nilif the cast fails.