我有一个NSMutableArray,我加载了不同的对象(类)。
现在我需要遍历数组并进入类以进行进一步操作。
我正在尝试这种方法......
for (id obj in allPointsArray)
{
///// this is where i need to bring the obj into a class to work with
NSInteger loc_x = obj.x_coord;
NSInteger loc_y = obj.y_coord;
}
但我无法理解实际上将类从数组中移出并将其放入可用对象中。
x_coord和y_coord在存储在数组中的所有对象之间是通用的。
感谢大家的帮助
答案 0 :(得分:5)
如果数组中的对象属于不同的类,您是否尝试执行不同的操作?你可以这样做:
for (id obj in myArray) {
// Generic things that you do to objects of *any* class go here.
if ([obj isKindOfClass:[NSString class]]) {
// NSString-specific code.
} else if ([obj isKindOfClass:[NSNumber class]]) {
// NSNumber-specific code.
}
}
答案 1 :(得分:3)
如果您使用消息语法而不是点1:
,代码应该有效for (id obj in allPointsArray) {
NSInteger loc_x = [obj x_coord];
NSInteger loc_y = [obj y_coord];
}
或者您可以为所有要点编写一个通用协议:
@protocol Pointed
@property(readonly) NSInteger x_coord;
@property(readonly) NSInteger y_coord;
@end
@interface FooPoint <Pointed>
@interface BarPoint <Pointed>
现在您可以缩小迭代中的类型并使用点语法:
for (id<Pointed> obj in allPointsArray) {
NSInteger loc_x = obj.x_coord;
NSInteger loc_y = obj.y_coord;
}
取决于具体情况。
答案 2 :(得分:0)
您可以使用NSObject的-isKindOfClass:
实例方法检查对象的类成员身份。正是如此:
for (id obj in allPointsArray) {
if ([obj isKindOfClass:[OneThing class]]) {
OneThing* thisThing = (OneThing *)obj;
....
}
else if ([obj isKindOfClass:[OtherThing class]]) {
OtherThing *thisThing = (OtherThing *)obj;
....
}
}
如果你这样做,不仅会编译,而且Xcode会根据你所投射的thisThing
类建议有用的代码完成。