我似乎无法弄清楚如何让Objective-c自动封装我的原语.
我以为我能够做到以下几点
float foo = 12.5f;
NSNumber* bar;
bar = foo;
Run Code Online (Sandbox Code Playgroud)
但是我发现我习惯了更冗长的方法
float foo = 12.5f;
NSNumber* bar;
bar = [NSNumber numberWithFloat:foo];
Run Code Online (Sandbox Code Playgroud)
我做错了还是这样做得好?
Bar*_*ark 29
不幸的是,Objective-C不会对原始类型进行自动装箱或拆箱NSNumber.当这样说时,可能很清楚为什么:Objective-C没有NSNumberCocoa Foundation框架中的类的概念.作为C的一个小超集,Objective-C没有"本机"数字对象类型 - 只是本机C类型.
编辑2012年8月 从Xcode 4.4(和LLVM 4.0)开始,您现在可以使用一些语法糖来包装数字.按照你的例子,这些"盒装表达式"现在可以工作:
float foo = 12.5f;
NSNumber* bar;
bar = @(foo);
bar = @12.5f;
Run Code Online (Sandbox Code Playgroud)
nsc*_*hum 11
Clang 3.1和Apple LLVM 4.0(包含在Xcode 4.4中)支持一个新的拳击功能:http://clang.llvm.org/docs/ObjectiveCLiterals.html#objc_boxed_expressions
你现在可以写:
NSNumber *bar = @(foo);
Run Code Online (Sandbox Code Playgroud)
以及:
NSNumber *bar = @12.5F;
Run Code Online (Sandbox Code Playgroud)
所以它变得更好了.:)
| 归档时间: |
|
| 查看次数: |
7661 次 |
| 最近记录: |