我有一个类,它带有一个NSArray
不同对象的实例变量,我知道它们应该从同一个超类继承。我的问题是如何从另一个类(其控制器)访问实例变量和方法,同时确保数组的内容仅包含属于某个类的子类的对象?我尝试实现一个最小的协议,并以类型id
和(id *)
引用数组中的对象,但这不能让我访问数组中类的任何实例变量或方法(正确的是)。
在目标文件中
NSArray* components; // contains subclasses of component
在控制器文件中
subclassofClassObject* object;
是否存在subclassOf函数,宏,typedef ...等或替代方法,因此我可以从控制器的子类引用对象的子类中的组件的子类。即替换SubclassofClass的东西。
最佳答案
我不太了解您的要求,但以下内容可能会有所帮助:
您可以使用isKindOfClass:
确定是某个类的实例还是其子类之一。例如,给定一个类MyBaseClass
,然后使用强制转换:
id elem = [components objectAtIndex:ix];
if ([elem isKindOfClass:[MyBaseClass class]])
{
// elem is an instance of MyBaseClass or one of its subclasses so cast is safe
MyBaseClass *mbc = (MyBaseClass *)elem;
// now can access methods, properties and public instance variables
// of MyBaseClass via mbc without warnings
...
}
关于objective-c - 访问子类实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8613578/