从Obj-c中的数字中减去一个数字

时间:2012-11-06 19:30:51

标签: objective-c ios

这可能会给我一大堆downvotes,但是啊。请记住,我来自AS3背景。

是的,我正在编写一个显示器,显示自种植/施工开始以来已经存在多长时间。我有timeToCompletion值和我的timeSincePlanting值,就像这样..

 //get seconds since planting/construction start
    NSDate *now = [NSDate date];
    NSTimeInterval secondsSincePlantingInterval = [now timeIntervalSinceDate:plantingDate];

    //convert to Number
    NSNumber *secondsSincePlanting = [NSNumber numberWithDouble:secondsSincePlantingInterval];

    //get template object
    NSDictionary *templateObject = [self getTemplate:kingdomObject];

    //get how long I should take (in seconds)
    NSNumber *timeToCompletion = [templateObject objectForKey:@"constructionTime"];

在我尝试这样做之前,一切都在进行......

 NSNumber *timeLeft = [NSNumber numberWithInt:0];

 timeLeft = timeToCompletion - secondsSincePlanting;

来自AS3的是我的天生本能,但现在我意识到这可能只是试图从指针中减去一个指针?

所以第一个问题是,我怎么能用2个NSNumber做到这一点?如果那是不可能的,我必须使用NSDecimalNumber,我只是将所有内容转换为NSDecimalNumber并做这样的减法吗?唯一的事情是我只需要整数,因为我代表秒,不需要进入小数位和所有这些。

2 个答案:

答案 0 :(得分:4)

不要使用NSNumber对象。

NSDate *now = [NSDate date];
NSTimeInterval secondsSincePlantingInterval = [now timeIntervalSinceDate:plantingDate];

//get template object
NSDictionary *templateObject = [self getTemplate:kingdomObject];

//get how long I should take (in seconds)
NSNumber *timeToCompletion = [templateObject objectForKey:@"constructionTime"];
NSTimeInterval completionInterval = [timeToCompletion doubleValue];

NSTimeInterval timeLeft = completionInterval - secondsSincePlantingInterval;

答案 1 :(得分:3)

你可能还没有处理过面向对象的语言。并且很容易在NSInteger(这是一个“标量”值)和NSNumber(它是一个对象)之间混淆。

NSNumber是数值的“容器”,但不能在算术中使用,就像它是一个数字一样。相反,您必须访问其中包含的值。

另请注意,说NSNumber *timeLeft = [NSNumber numberWithInt:0];不会将数值初始化为零,而是在timeLeft中存储指向“包装”值0的不可变NSNumber对象的指针。然后不要修改具有下一个语句的那个​​对象(如果它按你想象的方式工作),而是你将一个指针替换为另一个,所以第一行是没用的。