Como converter um nsinteger em um Int?
-
20-09-2019 - |
Pergunta
Por exemplo, ao passar um value
mensagem para um NSInteger
instância como assim
[a value]
causa um exc_bad_access.
Então, como converter um NSInteger
para int
?
Se for relevante, apenas pequenos números <32 são usados.
Solução
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
nada mais é do que um bit de 32/64 int. (Ele usará o tamanho apropriado com base no sistema operacional/plataforma que você está executando)
Outras dicas
Se você quiser fazer isso em linha, basta lançar o NSUInteger
ou NSInteger
para um 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
Não tenho certeza sobre as circunstâncias em que você precisa converter um NSInteger
para um int
.
NSInteger é apenas um typedef:
O NSInteger costumava descrever um número inteiro de forma independente se você está construindo para um sistema de 32 bits ou de 64 bits.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Você pode usar NSInteger
Qualquer lugar que você use um int
sem convertê -lo.
Comumente usado no uisegmentedcontrol, "erro" aparece quando compilar em 64 bits em vez de 32 bits, uma maneira fácil de não passar para uma nova variável é usar essas dicas, adicione (int):
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
ao invés de :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];