Objective-C if else 函数,需要从数组迭代,但是 Xcode 抛出未声明的错误

Objective-C if else function, need to iterate from array, but Xcode is throwing undeclared errors

该代码应该是一个基本的 objc 程序,其中包含购买的国内外股票列表。现在,我必须将它们放入一个投资组合中并进行总结。我意识到我无法总结它们,因为我的 BNRForeign header 和实现文件出现错误。对于其余代码,请参见此处(我回答的另一个问题):

所以我正在为我正在阅读的一本书中的股票问题编写一些代码,我昨天发布的另一个问题部分回答了这个问题。我现在有一个全新的问题分支。

对于我的 if 条件,我想遍历一个数组,但我不确定如何实现它。

我的main.m:

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        BNRStockHolding *stock0 = [[BNRStockHolding alloc]init];
        BNRStockHolding *stock1 = [[BNRStockHolding alloc]init];
        BNRStockHolding *stock2 = [[BNRStockHolding alloc]init];
        BNRForeignStockHolding *stock3 = [[BNRForeignStockHolding alloc]init];

        stock0.purchaseSharePrice=2.30;
        stock0.currentSharePrice=4.50;
        stock0.numberOfShares=40;

        stock1.purchaseSharePrice=12.19;
        stock1.currentSharePrice=10.56;
        stock1.numberOfShares=90;

        stock2.purchaseSharePrice=45.10;
        stock2.currentSharePrice=49.51;
        stock2.numberOfShares=210;

        stock3.purchaseSharePrice=43.05;
        stock3.currentSharePrice=28.31;
        stock3.numberOfShares=15;

        NSMutableArray *stocks = [NSMutableArray arrayWithObjects:stock0, stock1, stock2, stock3, nil];
        for (BNRForeignStockHolding *s in stocks) {
            float a = s.purchaseSharePrice;
            float b = s.currentSharePrice;
            int c = s.numberOfShares;
            float d = s.costInDollars;
            float e = s.valueInDollars;
            float f = s.foreignCostInDollars;
            float g = s.foreignValueInDollars;

            if () {
                NSLog(@"\n Purchase Price: %.2f\n Current Price: %.2f\n Number of Shares %d\n Cost in Dollars %f\n Value in Dollars %f\n", a, b, c, d, e);
            }
            else {
                NSLog(@"\n Purchase Price: %.2f\n Current Price: %.2f\n Number of Shares %d\n Cost in Dollars %f\n Value in Dollars %f\n", a, b, c, f, g);
            }

            }
    }
    return 0;
}

基本上,对于 stock0、stock1 和 stock2,我需要 NSLog 来应用函数 a、b、c、d、e。对于 stock3,我需要 NSLog 来应用函数 a、b、c、f、g。

我试过这样的事情:

if (stock(i), i=0, i<=2) {

NSLog(@"etc", a, b, c, d, e);
}
else {
NSLog(@"etc", a, b, c, f, g);
}

Xcode 一直声明 stock(i) 和 i 是未定义的隐式函数,并且它们未声明。我明白这一点,但由于我是编程新手,我不确定如何定义它们以便我可以遍历我的数组。

感谢您的帮助!

您的 for 必须如下所示:

    for (BNRStockHolding * s in stocks) {
      //Common assingments
      if([s isKindOfClass:[BNRForeignStockHolding class]]){
          BNRForeignStockHolding * aux = (BNRForeignStockHolding*)s;
          float f = aux.foreignCostInDollars;
          float g = aux.foreignValueInDollars;
          NSLog(@"\n Purchase Price: %.2f\n Current Price: %.2f\n Number of Shares %d\n Cost in Dollars %f\n Value in Dollars %f\n", a, b, c, d, e);
      } else if([s isKindOfClass:[BNRStockHolding class]]){
          NSLog(@"\n Purchase Price: %.2f\n Current Price: %.2f\n Number of Shares %d\n Cost in Dollars %f\n Value in Dollars %f\n", a, b, c, f, g);
      }
   }

一概而论,您的问题实际上并不是 "do something for stock3",而是 "do something based on whether the stock is an instance of BNRForeignStockHolding or not"。

当你有一个 class 的实例时,你可以使用方法 isMemberOfClass: 测试它是否是一个特定的 class (注意:有一个相关的方法 isKindOfClass: 测试 class 或其任何子 classes).

因此您可以使用以下方法测试 s 是否是 BNRForeignStockHolding 的实例:

[s isMemberOf:[BNRForeignStockHolding class]]

使用这个你可以重写你的代码只使用两个变量,de,根据 s:

的类型设置它们
float d, e;
if ([s isMemberOf:[BNRForeignStockHolding class]])
{
   // BNRForeignStockHolding
   d = s.foreignCostInDollars;
   e = s.foreignValueInDollars;
}
else
{
   // BNRStockHolding
   d = s.costInDollars;
   e = s.valueInDollars;
}

现在您可以只使用变量 abcde,这并不重要,如果任何,你的股票都是外国的代码会起作用。

HTH