I want to accept a Class object as a parameter to a constructor of one of my classes. It needs to do a lot of custom work with it, and I want to abstract that away from the user of the class.
For example, let's say my class is a Dealership and I want to initialize it with any type of Vehicle.
So I have the following hierarchy:
Dealership : NSObject
Vehicle : NSObject
Truck : Vehicle
Van : Vehicle
Car : Vehicle
What I want to do is, inside Dealership, implement the following initializer:
- (id)initWithVehicle:(Class)aVehicle;
Except instead of accepting a generic Class, I'd like to restrict it to only Classes of type "Vehicle" (which would include all my inherited classes). I could just test for this property in the initializer, but it would be great if there was a way to enforce this at compile time instead of waiting for runtime feedback.
It seems you can reference Class to restrict to classes that implement a certain interface, so I could do some hackery there. Is there any way to refer to Class objects of a specific type though?
EDIT - Note that I edited the example classes because the original example was a bit misleading. The example is just for demonstration purposes, not the actual class hierarchy I'm working with.