Objective-CIF else函数,需要从数组迭代,但Xcode抛出了未声明的错误
该代码应该是一个基本的objc程序,其中包含一个已购买股票的列表,包括国内外股票。现在,我必须把它们放入一个投资组合中,并对其进行总结。我意识到我不能总结它们,因为我的BNRForeign头文件和实现文件出错。关于代码的其余部分,请参见此处(我回答的另一个问题): 因此,我正在为我正在阅读的一本书中的股票问题编写一些代码,我昨天发布的另一个问题部分回答了这个问题。我现在有一个全新的问题 对于if条件,我希望遍历数组,但不确定如何实现 我的main.m:Objective-CIF else函数,需要从数组迭代,但Xcode抛出了未声明的错误,objective-c,xcode,loops,if-statement,nsmutablearray,Objective C,Xcode,Loops,If Statement,Nsmutablearray,该代码应该是一个基本的objc程序,其中包含一个已购买股票的列表,包括国内外股票。现在,我必须把它们放入一个投资组合中,并对其进行总结。我意识到我不能总结它们,因为我的BNRForeign头文件和实现文件出错。关于代码的其余部分,请参见此处(我回答的另一个问题): 因此,我正在为我正在阅读的一本书中的股票问题编写一些代码,我昨天发布的另一个问题部分回答了这个问题。我现在有一个全新的问题 对于if条件,我希望遍历数组,但不确定如何实现 我的main.m: int main(int argc, co
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);
}
if(stock(i),i=0,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);
}
}
概括而言,你的问题不是“为stock3
做点什么”,而是“根据股票是否是BNRForeignStockHolding
的实例做点什么”
当您有一个类的实例时,您可以使用方法isMemberOfClass:
(注意:有一个相关的方法isKindOfClass:
,它测试类是否是一个类或其任何子类)
因此,您可以使用以下方法测试s
是否是BNRForeignStockHolding
的实例:
[s isMemberOf:[BNRForeignStockHolding class]]
使用此选项,您可以重写代码,只使用两个变量,d
和e
,根据s
的类型设置它们:
float d, e;
if ([s isMemberOf:[BNRForeignStockHolding class]])
{
// BNRForeignStockHolding
d = s.foreignCostInDollars;
e = s.foreignValueInDollars;
}
else
{
// BNRStockHolding
d = s.costInDollars;
e = s.valueInDollars;
}
现在,您可以使用变量a
、b
、c
、d
和e
,而不管您的股票中有哪些是外来的,代码都会起作用
HTHThx,我会试试。我不熟悉objective-c和Xcode,它有自己的怪癖。好吧,它部分像我的其他尝试一样工作……尽管有一个问题:Xcode成功构建,但它会抛出一些运行时错误,例如“内存地址未捕获异常”和NSException。”我正在浏览Xcode文档中的函数,但是我很难找到一个可以很好地工作的东西。我不会像这样编写程序,但这本书对此提出了挑战,我想知道设置是否很差,因为在这一点上,似乎最好的选择是将BNRForeign和BNRStock合并为一个,remove if/else,只需分离NSLog打印输出。好的,现在,我在float f=foreignCostInDollars上得到一个运行时错误;这表示线程1 SIGABRT。您“for”中有一个问题你说每个类都是BNRForeignStockHolding,但大多数都是BNRStockHolding。我想这可能是个问题,但我不确定如何将所有股票包含到一个数组中,因为它们来自不同的类。我知道这听起来像是一个愚蠢的问题,但我对objective-c不太熟悉,它的语法有时让我感到困惑。我想是的因为我的BNRForeign实现文件是BNRStock头的一个子类,调用BNRForeign也会调用BNRStock函数,因为BNRForeign股票只是带有额外计算(转换率)的股票,但在其他方面处理方式相同。代码运行良好,但有没有更好的方法来编写此数组?我没有这个-应用函数?什么是stock(I)如果应该是什么…将objC代码和xcodeLink的屏幕截图添加到OP中添加的完整代码中。非常感谢,这解决了我的问题!这正是我想要做的,但不知道如何做。我真的不知道我可以定义e,d两次,但没有冲突。现在我知道我可以分开定义if/else函数中的变量。感谢您的详细解释和示例。代码很干净,一点也不冗长。很抱歉,有一个输入错误,已修复。您只声明变量d
和e
一次,但根据条件测试为它们分配不同的值。没问题,我在测试时发现了输入错误修改代码…xcode崩溃了,我再次意识到发生了什么,哈哈。Thx。如果你有时间,你能看看我关于同一代码的另一个问题吗,我对xcode和我的头文件,Thx又很难理解。即使我导入了另一个头文件,它也不会接受一个头文件作为另一个头文件的子类: