iphone - how - Cómo crear un NSMutableArray de valores de coma flotante
declare arrays in swift (4)
Soy nuevo en el desarrollo de Objective-C y iPhone, y estoy tratando de almacenar valores de coma flotante en un NSMutableArray, pero cuando lo hago me sale un error que dice "tipo incompatible para el argumento 1 de ''addObject''. ¿Qué estoy haciendo mal? Intento crear una matriz de dobles con la que pueda realizar cálculos matemáticos.
En Cocoa, NSMutableDictionary (y todas las colecciones, en realidad) requieren objetos como valores, por lo que no puede simplemente pasar cualquier otro tipo de datos. Como sugirieron sjmulder y Ryan, puede ajustar sus valores escalares en instancias de NSNumber (para número) y NSValue para otros objetos.
Si está representando un número decimal, por algo así como un precio, le sugiero también que mire y use NSDecimalNumber . A continuación, puede evitar los problemas de inexactitud de los puntos flotantes, y generalmente puede usar y almacenar el "valor" como NSDecimalNumber en lugar de representarlo con una primitiva en el código.
Por ejemplo:
// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray* prices= [[NSMutableArray array] retain];
// ...
[prices addObject:price];
NSMutableArray solo contiene objetos, por lo que desea que se cargue una matriz con objetos NSNumber. Crea cada NSNumber para contener tu doble y luego agrégalo a tu matriz. Quizás algo como esto.
NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
Repita según sea necesario.
Use un NSNumber para envolver su flotador, porque el diccionario necesita un objeto:
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];
recuperarlo enviando floatValue:
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
El código no está probado.
También puede ajustar muchos otros tipos de datos en NSNumber, consulte la documentación . También hay NSValue para algunas estructuras como NSPoint y NSRect.
NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];
NSlog(@"my array is--%@",muArray);