使用LLVM 4进行Objective-C自动装箱/拆箱

6
我一直在研究Objective-C中的自动装箱(例如这里)。是否有一个新的语法来取消装箱呢?
例如,我想要缩短以下代码:
NSArray *oneNumber = @[@1];
int one = ((NSNumber *)oneNumber[0]).intValue;

第二行的语法太可怕了。有没有新的语言特性来处理这个问题?

1
请注意,这既不是自动装箱也不是自动拆箱。对于标量和集合,@... 语法与点语法一样,是编译器对具体方法调用的简写。自动装箱意味着当传递给需要 NSNumber* 的方法时,裸标量(int x = 5;)会被神奇地装箱。 (例如,KVC 的 valueForKey: 是自动装箱/拆箱)。 - bbum
1
谢谢,@bbum。称它们为“对象字面量”是正确的吗? - Dan Rosenstark
2个回答

8
[oneNumber[0] intValue]

有时候,老方法是最好的。

我总是忘记点语法的限制。+1个好观点。 - Dan Rosenstark
假设您事先知道 oneNumber [0] 响应 intValue 调用。否则,程序会崩溃。但是我同意“老方法”的说法。有时候,“好东西”太多可能会… - Motti Shneor

0

另一种方法是保持在对象世界中。例如:

NSNumber *one = @1;
NSArray *oneNumber = @[one];
one = oneNumber[0];
NSLog(@"one %@", one);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接