【问题标题】:+[NSNumber numberWithUnsignedInteger:] Literal?+[NSNumber numberWithUnsignedInteger:] 字面量?
【发布时间】:2012-09-13 01:10:35
【问题描述】:

我知道我可以用@3 代替[NSNumber numberWithInt:3]
但是[NSNumber numberWithUnsignedInteger:3] 的字面意思是什么?

【问题讨论】:

    标签: iphone objective-c nsnumber unsigned-integer objective-c-literals


    【解决方案1】:

    您可以使用@3U@3UL(或使用通常的整数后缀来更改类型,例如@3ULL 用于unsigned long long)。

    有关 NSNumber 文字的更多信息,请参阅 this page

    【讨论】:

    • 看起来你也可以使用小写后缀,例如,@3u,根据 Xcode Docs : Programming with Objective-C : Values and Collections。
    【解决方案2】:

    如果您不记得正确的文字,也可以进行类型转换。

    NSNumber* number = @((NSUInteger)3);
    

    【讨论】:

    • +numberWithUnsignedInteger: 采用 NSUInteger,而不是 unsigned int。我已经编辑了您的帖子以反映这一点。
    • 实际上,这似乎比@3u 更好,因为它在 Mac 和 iOS 上都是正确的,而添加 u 作为后缀只对 iOS 正确,而不是 Mac (ul)。对吗?
    【解决方案3】:

    @3UL 会给你一个NSNumber,它与NSUInteger 的宽度/签名明确相同。

    但是问问自己为什么你想要这个?由于3 可以完全由C/Objective-C1 中的所有 数字类型表示,因此@3 为您提供了一个行为相同的对象。虽然使用的常量的类型不同,但你得到的对象可以以所有相同的方式使用,并且可以用相同的一组方法进行拆箱。

    1 好的,好的,除了只表示 1 位的类型,例如 _Boolint : 1

    【讨论】:

    • 实际上,1 宽的位域无法表示 3,仅供参考。
    • _Bool 是数字类型吗?我很确定 _Bool 的转换规则确保它只包含 0 或 1。
    • @dreamlax 好的,好的,修改我的答案。学究。
    • 我只是在开玩笑 :) 你的回答有道理,但也许 3UL 不是唯一需要装箱的无符号整数。
    • @dreamlax:它们都要求将拳击用作NSNumber,但担心原语的类型通常很愚蠢,因为NSNumber 将尽可能无损地转换。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2011-02-18
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多