[英]Error throwing Objective-C function not translated to Swift by XCode 6.4
[英]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]]
使用这个你可以重写你的代码只使用两个变量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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.