简体   繁体   中英

Setting up a class identifier to be called when logging array data

Hey stackOverflow community. I am working through Big Nerd Ranch's Objective C book and have come across the fun chapter on defining and setting up classes (chapter 17 if you're familiar). In it the challenge has us write a program where we define a stock class with several properties and instance variables. I have been able to get the program to work as asked but I want to tinker a little with it to get it to also NSLog a stockName so I can see what stock is associated with its properties.

Basically, is there a way to make the code more concise for this block:

NSString *appleName = @"AppleInc";
[Apple setStockIdentifier:appleName];

Maybe more like this:

[Apple setStockIdentifier:"AppleInc"];

I tried setting the property as a char in the class file but couldnt get it to work. Im new to this but I'm thinking that declaring a new NSString for the stockIdentifier value is extra code that isn't needed. Any feedback would be greatly appreciated.

Below is what I have for the main file:

 #import <Foundation/Foundation.h>
 #import "StockHolding.h"

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

@autoreleasepool {

    StockHolding *Apple = [[StockHolding alloc] init];
    NSString *appleName = @"AppleInc";
    [Apple setStockIdentifier:appleName];
    [Apple setPurchaseSharePrice:2.30];
    [Apple setCurrentSharePrice:4.50];
    [Apple setNumberOfShares:40];

    StockHolding *HomeDepot = [[StockHolding alloc] init];
    NSString *homeDepotName = @"Home Depot Inc";
    [HomeDepot setStockIdentifier:homeDepotName];
    [HomeDepot setPurchaseSharePrice:12.19];
    [HomeDepot setCurrentSharePrice:10.56];
    [HomeDepot setNumberOfShares:90];

    StockHolding *Cisco = [[StockHolding alloc] init];
    NSString *ciscoName = @"Cisco Inc";
    [Cisco setStockIdentifier:ciscoName];
    [Cisco setPurchaseSharePrice:45.10];
    [Cisco setCurrentSharePrice:49.51];
    [Cisco setNumberOfShares:210];

    NSMutableArray *listOfStocks = [NSMutableArray arrayWithObjects:Apple, HomeDepot, Cisco, nil];

    for (StockHolding *currentStock in listOfStocks) {
        NSLog(@"%@, Purchase Share Price: %.2f; Current value: %.2f; Number of shares: %i",[currentStock stockIdentifier],[currentStock purchaseSharePrice], [currentStock currentSharePrice], [currentStock numberOfShares]);
    }


}
return 0;
}

Below is the contents of StockHolding.h:

#import <Foundation/Foundation.h>

@interface StockHolding : NSObject

{
//char stockIdentifier;
float purchaseSharePrice;
float currentSharePrice;
int numberOfShares;
}

@property NSString *stockIdentifier;
@property float purchaseSharePrice;
@property float currentSharePrice;
@property int numberOfShares;

-(float) costInDollars; //purchaseSharePrice * numberOfShares;
-(float) valueInDollars; //currentSharePrice * numberOfShares;

@end

And here is StockHolding.m:

#import "StockHolding.h"

@implementation StockHolding

@synthesize currentSharePrice, purchaseSharePrice, numberOfShares, stockIdentifier;

-(float)costInDollars;
{
return (purchaseSharePrice * numberOfShares);
}

-(float)valueInDollars;
{
return (currentSharePrice * numberOfShares);
}

@end

This is simply a syntax error.

[Apple setStockIdentifier:"AppleInc"];

Should be...

[Apple setStockIdentifier:@"AppleInc"];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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