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]]
使用这个你可以重写你的代码只使用两个变量,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
,这并不重要,如果任何,你的股票都是外国的代码会起作用。
HTH
该代码应该是一个基本的 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]]
使用这个你可以重写你的代码只使用两个变量,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
,这并不重要,如果任何,你的股票都是外国的代码会起作用。
HTH