我想对NSNumbers执行一些简单的算术并保留类型.这可能吗?
例如:
- (NSNumber *)add:(NSNumber *)firstNumber to:(NSNumber *)secondNumber;
Run Code Online (Sandbox Code Playgroud)
是我的方法定义,firstNumber和secondNumber是整数然后我想返回一个整数,它们是两者的整数加法.同样,如果两者都是双打,那么将结果作为双精度返回.
看起来我可以使用[NSNumber objCType]在这个问题中找到的类型(布尔除外):获取NSNumber的类型但是我似乎无法提取这些类型并且在没有大量代码的情况下进行计算以提取值进行计算和返回每种可能类型的结果.
这样做有简短而简洁的方法吗?
我有一个类似这样的计算:
Price = value * randomNumberBetween(decimalValueA, decimalValueB)
Run Code Online (Sandbox Code Playgroud)
我最初使用浮点数/双打来生成这个.然而,在对objective-c进行了更多的讨论后,有人多次提到,在计算货币时你应该使用NSDecimalNumber.我遇到的问题是我在比较和事物中使用这个"价格"变量,例如:
if (deposit/price) < 0.2
return price*0.05;
Run Code Online (Sandbox Code Playgroud)
使用NSDecimalNumber会使这更加困难.据我所知,我应该将任何幻数(在本例中为0.2和0.05)转换为NSDecimalNumber,然后我可以比较它们并使用NSDecimalMultiply等函数.
另外,如果我有一个类似的功能:
return (minRandomPercentage + ((maxRandomPercentage - minRandomPercentage) * (randomNumber)
Run Code Online (Sandbox Code Playgroud)
它最终成为这个荒谬的嵌套函数调用字符串,如:
return [minRandomPercentage decimalNumberByAdding:[[maxRandomPercentage decimalNumberBySubtracting: minRandomPercentage] decimalNumberByMultiplyingBy:random]]
Run Code Online (Sandbox Code Playgroud)
这是否严重如何客观c处理小数?任何人都可以给我任何关于如何使这一点变得不那么艰难的线索吗?如果我可以与结果进行比较而不必投射我拥有的每个幻数,我可以使用嵌套函数调用.
我是Objective-C的新手.我知道C和C++,但Objective-C有相当的学习曲线.无论如何,是否有更短的方式(可能通过某种NSNumber文字,如果存在)写下面的内容:
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
Run Code Online (Sandbox Code Playgroud) 我正在观看WWDC2014上的一些视频并尝试编写我喜欢的代码,但我注意到的一个奇怪的事情是Swift一直对我生气并希望我投射到不同的数字类型.这很容易,但在WWDC的视频中他们不需要这样做.以下是"Interface Builder的新功能"中的示例:
-M_PI/2一直给我错误:"无法找到接受提供的参数的'/'的重载'
有没有人有这个问题的解决方案,这不仅仅涉及投射,因为有明显的另一种方式这样做?对于类似的问题,我有很多例子.
if !ringLayer {
ringLayer = CAShapeLayer()
let innerRect = CGRectInset(bounds, lineWidth / 2.0, lineWidth / 2.0)
let innerPath = UIBezierPath(ovalInRect: innerRect)
ringLayer.path = innerPath.CGPath
ringLayer.fillColor = nil
ringLayer.lineWidth = lineWidth
ringLayer.strokeColor = UIColor.blueColor().CGColor
ringLayer.anchorPoint = CGPointMake(0.5, 0.5)
ringLayer.transform = CATransform3DRotate
(ringLayer.transform, -M_PI/2, 0, 0, 1)
layer.addSublayer(ringLayer)
}
ringLayer.frame = layer.bounds
Run Code Online (Sandbox Code Playgroud) 抱歉这个愚蠢的问题.我正在尝试学习objc而且我无法在2个int值之间做一个简单的求和...实际上问题出在总和之前.
我有一个对象,其实例变量被定义为NSNumber,它被定义为属性,如下所示:
@interface MyObj : NSObject {
NSNumber *count;
}
@property (readwrite, assign) NSNumber *count;
@end
@implementation MyObj
@synthetize count;
@end
Run Code Online (Sandbox Code Playgroud)
然后我有一个将消耗MyObj的类:
- (void)total:(MyObj *)mobj {
int count = [mobj.count intValue];
NSLog(@"%@", mobj.count);
NSLog(@"%@", count);
int total = 10 + count;
NSLog(@"%@", total);
}
Run Code Online (Sandbox Code Playgroud)
第一个NSLog很好地打印mobj.count(比方说5),但是第二个,抛出一个EXC_BAD_ACCESS.当然,该计划永远不会达到总和.
那么,我做错了什么?我试图根据这篇文章将其转换为int .
TIA,
短发
好吧,我想我可能会过度复杂化这个问题,但我确实陷入困境.基本上,我试图模拟一个重量组,特别是一个奥运重量组.所以,我有其为45磅的条,然后我分别具有2个权重的2.5磅,4 5的磅,然后10 2,25,35,和45.这使得总共300磅.
bar = 45 lbs
2 of 2.5
4 of 5
2 of 10
2 of 25
2 of 35
2 of 45
Run Code Online (Sandbox Code Playgroud)
我想对这个重量集进行建模,以便我掌握这些信息:重量和重量.我知道我可以对此进行硬编码,但最终我想让用户输入他们可能拥有的每个重量的数量.
无论如何,最初我以为我可以简单地NSDictionary使用关键是重量,例如35,而值是数量.
当然我不能将原语存储在一个NSDictionary或其他Cocoa集合中,所以我必须将每个整数封装在一个NSNumber.然而,我对这个权重集建模的重点是我可以模拟某些权重的使用.例如,如果我使用35磅.重量需要2关(每侧一个),所以我必须去编辑35磅的值.重量来反映我从数量中扣除2的事实.
这涉及繁琐的任务,即拆箱NSNumber,转换回原语,进行数学运算,然后重新装箱NSNumber并将新结果分配给中的适当位置NSDictionary.经过一番搜索,我确认了我最初的预感,这不是一个好主意.
所以我有几个问题.首先,除了使用字典式解决方案之外,还有更好的方法来设置权重集吗?如果没有,建议的方法是什么?我是否必须离开可可领域并使用某种C++ STL模板,例如map?
我已经看到了一些信息NSDecimalNumber,我应该使用它吗?
就像我说的那样,如果我过于复杂,我也不会感到惊讶.我真的很感激任何帮助,谢谢.
编辑:我开始认为所描述的权重集'定义'确实应该是不可变的,因为它毕竟是一个定义.然后当我使用一定的重量时,我可以添加某种计数器.问题是,计数器也将是某种形式的集合,其值将被修改(添加到),以便我可以将其与特定权重相关联.所以我想我遇到了同样的问题.
我想我想要的是创建一个'克隆',可以说我可以轻松修改的权重集定义(模拟单个权重的使用).
对不起,我已经烧坏了.