如何将NSInteger转换为int?

Jef*_*rey 93 cocoa objective-c nsinteger

例如,将value消息传递给NSInteger类似的实例时

[a value] 它会导致EXC_BAD_ACCESS.

那么如何转换NSIntegerint

如果相关,则只使用小于32的小数.

Dav*_*ong 198

塔达:

NSInteger myInteger = 42;
int myInt = (int) myInteger;
Run Code Online (Sandbox Code Playgroud)

NSInteger只不过是32/64位int.(它将根据您正在运行的操作系统/平台使用适当的大小)

  • 确切地说,我认为NSInteger在32位平台上是一个int,在64位平台上是一个很长的. (12认同)
  • 我使用建议的"强制转换"得到警告:隐式转换失去整数精度:'NSUInteger'(又名'unsigned long')到'int' (4认同)
  • @chandhooguy你为什么要避免一个新的变量? (2认同)

Sam*_*lay 28

如果你想这样做在线,只投中NSUIntegerNSIntegerint:

int i = -1;
NSUInteger row = 100;
i > row // true, since the signed int is implicitly converted to an unsigned int
i > (int)row // false
Run Code Online (Sandbox Code Playgroud)

  • 我应该更清楚.由于这是一个有点新手的问题,新手程序员可能并不明白他们可以使用(int)表达式内联转换.其他答案没有显示这一点,我认为它可以帮助任何偶然发现此页面的人. (25认同)
  • 因为我的答案是单行(使用内联类型转换 - (int)),我认为这是OP可能想要的.我自己调查了一下,发现这个问题的所有答案都是多线的. (6认同)
  • 而且我在另一年半之后偶然发现了这个页面,特别需要与_NSUInteger_相关的演员.谢谢,塞缪尔! (4认同)
  • 只是出于好奇,为什么你要在两年后发布一个答案,而这个问题已经有两位数的接受答案?特别是因为你的只是对该答案的改写。 (2认同)
  • 接受的答案演示了使用单行进行的隐式转换.Abizern的回答解释了如果你试图使用`NSInteger`值代替`int`,就会发生隐式转换.在任何情况下都不是多线解决方案. (2认同)

Abi*_*ern 18

我不确定你需要将一个转换NSInteger为一个的情况int.

NSInteger只是一个typedef:

NSInteger用于描述整数,与您是为32位还是64位系统构建无关.

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Run Code Online (Sandbox Code Playgroud)

你可以使用NSInteger你使用的任何地方int而不转换它.

  • 这是一个很好的理由想要将NSUinteger转换为int:value比较.(int i = -1)>(NSUinteger j = 14)将int转换为unsigned,意思是-1> 14,这不是你想要的. (2认同)