Jon*_*Jon 30 arrays iphone double objective-c
我是Objective-C和iPhone开发的新手,我正在尝试在NSMutableArray中存储浮点值,但是当我这样做时,我得到一个错误,说"addObject的参数1的不兼容类型".我究竟做错了什么?我正在尝试创建一个双打数组,我可以用它来执行数学计算.
Rya*_*end 62
NSMutableArray只保存对象,因此您希望使用NSNumber对象加载数组.创建每个NSNumber以保存您的double然后将其添加到您的阵列.也许是这样的.
NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
Run Code Online (Sandbox Code Playgroud)
根据需要重复.
Sij*_*der 12
使用NSNumber来包装你的浮点数,因为字典需要一个对象:
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];
Run Code Online (Sandbox Code Playgroud)
通过发送floatValue来检索它:
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
Run Code Online (Sandbox Code Playgroud)
代码未经测试.
您也可以在NSNumber中包装许多其他数据类型,请查看文档.对于像NSPoint和NSRect这样的结构,还有NSValue.
在Cocoa中,NSMutableDictionary(以及所有集合)确实需要将对象作为值,因此您不能简单地传递任何其他数据类型.正如sjmulder和Ryan所建议的那样,您可以将标量值包装在NSNumber(对于数字)和NSValue的实例中以用于其他对象.
如果你代表一个十进制数字,对于类似价格的东西,我建议你也看一下并使用NSDecimalNumber.然后,您可以避免浮点不准确问题,并且通常可以使用并将"值"存储为NSDecimalNumber,而不是使用代码中的基元来表示它.
例如:
// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray* prices= [[NSMutableArray array] retain];
// ...
[prices addObject:price];
Run Code Online (Sandbox Code Playgroud)