【发布时间】:2012-09-13 01:10:35
【问题描述】:
我知道我可以用@3 代替[NSNumber numberWithInt:3]
但是[NSNumber numberWithUnsignedInteger:3] 的字面意思是什么?
【问题讨论】:
标签: iphone objective-c nsnumber unsigned-integer objective-c-literals
我知道我可以用@3 代替[NSNumber numberWithInt:3]
但是[NSNumber numberWithUnsignedInteger:3] 的字面意思是什么?
【问题讨论】:
标签: iphone objective-c nsnumber unsigned-integer objective-c-literals
您可以使用@3U 或@3UL(或使用通常的整数后缀来更改类型,例如@3ULL 用于unsigned long long)。
有关 NSNumber 文字的更多信息,请参阅 this page。
【讨论】:
如果您不记得正确的文字,也可以进行类型转换。
NSNumber* number = @((NSUInteger)3);
【讨论】:
+numberWithUnsignedInteger: 采用 NSUInteger,而不是 unsigned int。我已经编辑了您的帖子以反映这一点。
@3UL 会给你一个NSNumber,它与NSUInteger 的宽度/签名明确相同。
但是问问自己为什么你想要这个?由于3 可以完全由C/Objective-C1 中的所有 数字类型表示,因此@3 为您提供了一个行为相同的对象。虽然使用的常量的类型不同,但你得到的对象可以以所有相同的方式使用,并且可以用相同的一组方法进行拆箱。
1 好的,好的,除了只表示 1 位的类型,例如 _Bool 和 int : 1。
【讨论】:
_Bool 是数字类型吗?我很确定 _Bool 的转换规则确保它只包含 0 或 1。
3UL 不是唯一需要装箱的无符号整数。
NSNumber,但担心原语的类型通常很愚蠢,因为NSNumber 将尽可能无损地转换。