繁体   English   中英

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

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

该代码应该是一个基本的objc程序,其中包含所购买的股票,国外和国内的列表。 现在,我必须将它们放入投资组合并总结。 我意识到我无法总结它们,因为我的BNRForeign标头和实现文件出错了。 对于其余的代码,请看这里(我回答的另一个问题): 尝试创建一个总价值为Objective-C的股票组合,但不确定该方法

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

对于我的if条件,我想迭代一个数组,但我不知道如何实现它。

我的主要人物

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一直说明股票(i)和我是未定义的隐含函数,并且它们是未声明的。 我理解这一点,但由于我是编程新手,我不确定如何定义它们以便我可以遍历我的数组。

谢谢你的帮助!

你的看起来像那样:

    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);
      }
   }

stock3 ,你的问题不是真的“为stock3做些什么”,而是“根据股票是否是BNRForeignStockHolding的实例来BNRForeignStockHolding ”。

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

所以你可以使用以下方法测试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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM