【发布时间】:2014-08-03 00:06:07
【问题描述】:
我对使用填充有相似对象的数组进行快速枚举感到很困惑
假设:
我有 1 个类(Stock Class),它有 1 个子类 ForeignStock。
股票类的属性:
@property float purchaseSharePrice,currentSharePrice;
@property int numberOfShares;
ForeignStock 的属性
@property float conversionRate;
我将上述 2 中的实例放入 MutableArray。如何使用快速枚举显示(NSLog)这两个不同的对象?
int i = 1;
for (StockHolding *iterate in shelf) {
if ([iterate isMemberOfClass:[StockHolding class]])
{
NSLog(@"============ Properties of Stock Value %i ============",i);
NSLog(@"purchase price is %f",iterate.purchaseSharePrice);
NSLog(@"current price is %f",iterate.currentSharePrice);
NSLog(@"number of shares bought is %i",iterate.numberOfShares);
NSLog(@"--------------Total Value & Cost--------------");
NSLog(@"Value in dollar for this stock is %f",iterate.valueInDollars);
NSLog(@"Cost in dollar for this stock is %f",iterate.costInDollars);
i++;
}
else{
for (ForeignStockHolding *iterate1 in shelf) {
if ([iterate1 isMemberOfClass:[ForeignStockHolding class]]) {
NSLog(@"============ Properties of Stock Value %i ============",i);
NSLog(@"purchase price is %f",iterate1.purchaseSharePrice);
NSLog(@"current price is %f",iterate1.currentSharePrice);
NSLog(@"number of shares bought is %i",iterate1.numberOfShares);
NSLog(@"--------------Total Value, Cost, & Conversion Rate --------------");
NSLog(@"Value in dollar for this stock is %f",iterate1.valueInDollars);
NSLog(@"Cost in dollar for this stock is %f",iterate1.costInDollars);
NSLog(@"Conversion rate for this stock is %f",iterate1.conversionRate);
i++;
}
}
}
}
上面的代码没有成功,ForeignStock NSLogged 的输出为每个 ForeignStock 实例输出 2 次(我知道,第二次快速枚举的方法是错误的)。
如何构建快速枚举,它可以使数组中每个对象的类不同,对每个类子类对象进行不同的处理?
【问题讨论】:
-
您的问题涉及
Stock和ForeignStock类,但您的代码引用了StockHolding和ForeignStockHolding。如果你让它们匹配会有所帮助。 -
您可以使用
isKindOfClass来完成此操作,但更好的方法是将一个方法放入父类和子类中,以执行您需要的任何操作,然后在循环中简单地调用它......让对象找出正确的行为。多态性...有效! :) -
糟糕的设计。使
ForeignStockHolding成为StockHolding的子类。实现-printInfo方法(或类似方法)。StockHolding如上所示,ForeignStockHolding调用[super printInfo],然后打印转化率。一般来说,您永远不想将复杂的类知识实现到其他类中,这不是面向对象编程的意义所在。
标签: objective-c for-loop nsmutablearray fast-enumeration