Jestem nowy w rozwoju Objective-C i iPhone'a i próbuję przechowywać wartości zmiennoprzecinkowe w NSMutableArray, ale kiedy to robię, pojawia się komunikat "niekompatybilny" type dla argumentu 1 elementu "addObject". Co ja robię źle? Próbuję stworzyć tablicę podwójną, z którą mogę wykonywać obliczenia matematyczne.Jak utworzyć NSMutableArray wartości zmiennoprzecinkowych
Odpowiedz
NSMutableArray zawiera tylko obiekty, więc chcesz załadować tablicę obiektami NSNumber. Utwórz każdy numer NSN, aby zatrzymać swój plik podwójny, a następnie dodaj go do swojej tablicy. Być może coś takiego.
NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
Powtórz zgodnie z potrzebami.
Użyć NSNumber owinąć pływak, ponieważ słownik potrzebuje obiektu:
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];
odzyskać przesyłając floatValue:
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
Code jest niesprawdzone.
Można zawijać wiele innych typów danych również w NSNumber, sprawdź documentation. Istnieje również NSValue dla niektórych struktur, takich jak NSPoint i NSRect.
W kakao NSMutableDictionary (i wszystkie kolekcje, naprawdę) wymagają obiektów jako wartości, więc nie można po prostu przekazać żadnego innego typu danych. Jak zasugerowali sjmulder i Ryan, możesz zawijać wartości skalarne w instancjach NSNumber (dla numeru) i NSValue dla innych obiektów.
Jeśli reprezentujesz liczbę dziesiętną, za coś podobnego do ceny, sugerowałbym również przeglądanie i używanie NSDecimalNumber. Możesz wtedy uniknąć problemów związanych z niedokładnością zmiennoprzecinkową i zazwyczaj możesz używać i przechowywać "wartość" jako NSDecimalNumber zamiast reprezentowania jej za pomocą kodu pierwotnego.
Na przykład:
// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray* prices= [[NSMutableArray array] retain];
// ...
[prices addObject:price];
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);
Proszę wyjaśnij swoją odpowiedź – Gwenc37
Zastosowanie numberWithFloat jeśli nie trzeba precyzji. –