我想接受一个类对象作为我的一个类的构造函数的参数。它需要用它做很多自定义工作,我想从类的用户那里抽象出来。
例如,假设我的类是经销商,我想用任何类型的车辆对其进行初始化。
所以我有以下层次结构:
Dealership : NSObject
Vehicle : NSObject
Truck : Vehicle
Van : Vehicle
Car : Vehicle
我想做的是,在 Dealership 内部,实现以下初始化程序:
- (id)initWithVehicle:(Class)aVehicle;
除了不接受通用类外,我想将其限制为仅“车辆”类型的类(这将包括我所有继承的类)。我可以只在初始化程序中测试此属性,但如果有一种方法可以在编译时强制执行此属性而不是等待运行时反馈,那就太好了。
看来你可以引用 Class 来限制实现特定接口(interface)的类,这样我就可以在那里做一些黑客攻击。有什么方法可以引用特定类型的类对象吗?
编辑 - 请注意,我编辑了示例类,因为原始示例有点误导。该示例仅用于演示目的,而不是我正在使用的实际类层次结构。
最佳答案
您可以确保使用协议(protocol)检查:
- (id)initWithVehicle:(id<VehicleProtocol>)aVehicle;
...
}
将对象声明为 id 告诉编译器您不关心对象是什么类型,但您关心它是否符合指定的 VehicleProtocol 协议(protocol)**。
关于iphone - Objective-C 中的特定类类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873911/