Come convertire un NSInteger ad un int?
-
20-09-2019 - |
Domanda
Per esempio quando si passa un messaggio value
a un'istanza NSInteger
in questo modo
[a value]
provoca un EXC_BAD_ACCESS.
Così come convertire un NSInteger
a int
?
Se è interessati solo piccoli numeri <32 sono utilizzati.
Soluzione
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
non è altro che un 32/64 bit int. (Userà la dimensione appropriata in base a quale sistema operativo / piattaforma si sta eseguendo)
Altri suggerimenti
Se si vuole fare questo in linea, appena gettato la NSUInteger
o NSInteger
a un int
:
int i = -1;
NSUInteger row = 100;
i > row // true, since the signed int is implicitly converted to an unsigned int
i > (int)row // false
Non sono sicuro circa le circostanze in cui è necessario convertire un NSInteger
a un int
.
NSInteger è solo un typedef:
NSInteger Usato per descrivere un intero indipendentemente dal fatto che si stanno costruendo per un 32 bit o un sistema a 64-bit.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
È possibile utilizzare NSInteger
qualsiasi luogo si utilizza un int
senza convertirlo.
Comunemente utilizzato in UIsegmentedControl, "errore" compare durante la compilazione in 64bit invece di 32bit, modo semplice per non passare ad una nuova variabile è quello di utilizzare questo consigli, aggiungere (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
invece che:
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];