2012-03-14 14 views
36

Szybkie pytanie - czy można rzucić NSInteger do obiektu NSNumber? Muszę przekonwertować znacznik obiektu UIImageView na obiekt NSNumber, ponieważ muszę przekazać go jako argument do funkcji.Czy można rzucić NSInteger do NSNumber?

+0

to absolutnie możliwe rzutować NSInteger do NSNumber *. Wynik najprawdopodobniej doprowadzi do awarii. Oczywiście, jeśli masz liczbę x, możesz użyć @ (x), aby utworzyć obiekt NSNumber o wartości x. Który zadziała, ale nie jest obsadą. – gnasher729

Odpowiedz

99

Nie można obsadzić ponieważ to NSInteger nie jest obiektem, po prostu alias dla typu wbudowanego. W każdej chwili można utworzyć nowy NSNumber obiekt z NSInteger, tak:

NSNumber *myNum = @(myNsIntValue); 

lub wcześniejszej wersji kompilatora użyć

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 
+1

Ta odpowiedź generuje ostrzeżenie na nowych 64-bitowych urządzeniach. Zobacz dokładniejszą odpowiedź @ Kevina poniżej. –

+0

@FullDecent Edytowane, dzięki! – dasblinkenlight

6

To jest bardziej poprawna odpowiedź i to nie przyniesie nieoczekiwane błąd.

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 

Ponieważ dokument powiedział

„numberWithInteger. Tworzy i zwraca obiekt NSNumber zawierający określoną wartość, traktując je jako NSInteger”

"numberWithInt: Tworzy i zwraca obiekt NSNumber zawierający daną wartość, traktując go jako podpisaną int."

15

od Apple LLVM Compiler 4.0 istnieje łatwiejszy sposób tworzyć NSNumber obiektu:

NSNumber *x = @1234; 
NSNumber *y = @(anIntegerVariable); 
+1

NSNumber * z = @ (aDoubleValue); działa równie dobrze. – gnasher729

Powiązane problemy