循环通过NSMutableArray

时间:2011-01-31 18:00:50

标签: objective-c nsmutablearray

我有一个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在存储在数组中的所有对象之间是通用的。

感谢大家的帮助

3 个答案:

答案 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类建议有用的代码完成。