It’s a calculator. I have a display where I can put digits and variables (x, y etc.). When I push Enter button it sends what is on display to array with all operand.
As on display can be NSString (variables) or NSNumber (digits) I thought to use “id” as method argument.
- (IBAction)enterPressed
{
[self.brain pushOperand:self.display.text];
}
/////////////////////
- (void) pushOperand:(id)operand
{
////// So if operand is digit I need to transform it into NSNumber.
NSNumber *digitToStack = [NSNumber numberWithDouble:operand];
/////// Here is problem - "Sending '___strong id' to parameter of incompatible type 'double'
NSNumber *digitToStack = [operand doubleValue];
//////// If i do like this, i have warning - "Initializing 'NSNumber *__strong' with an expression of incompatible type 'double'
[self.programStack addObject:operand];
}
I don’t understand what this warnings are all about.
So the question is can I somehow put in Array NSNumber and NSString using id method, or how should I do it?
Can i ‘transform’ argument from ‘id’ method into NSNumber?
Yes you can “transform” your argument of
operand, but you’d need to do a cast.Also, the line:
fails because “operand” is an Objective C object while that function is expecting a C-style
doubletype (which is NOT an Objective C object).Here’s some code I wrote off the top of my head:
This code hasn’t been tested, has no warranties, and could certainly use a further cleaning up and optimization (e.g. the check for “0.0” isn’t what I would put into production code, myself).
But hopefully this is enough to get you further along, Sasha!