Pet*_*son 5 arrays iphone boxing objective-c ios
我是目标C中的iPhone开发者的初学者,我发现我做了很多事情就是在各种NSArray中进出浮点数(和整数)
float myFloatValue = [(NSNumber *)[myArray objectAtIndex:integerSelector] floatValue];
Run Code Online (Sandbox Code Playgroud)
我知道我需要做这个拳击因为float(或int)不是指针而且NSArray只接受指针.
我只是想知道是否有一点点语法糖来缩短这行代码 - 主要是因为当我有几个数组并且我循环它们来做一些处理我发现线条开始变得越来越大我必须打破从数组中提取数字的行只是为了使代码可读 - 然后我有很多gumph行,往往会使逻辑更难遵循.
在像C#这样的语言中我会写类似的东西
float myResult = myArray[i] + someOtherArray[i+1];
Run Code Online (Sandbox Code Playgroud)
(好吧 - 这可能是一段非常愚蠢的代码 - 但从语法上说它非常干净,我猜是因为.net正在隐式地进行拳击而我无法看到它)
在客观CI中找到自己写的:
float myFloatValue = [(NSNumber *)[myArray objectAtIndex:i] floatValue];
float myOtherFloatValue = [(NSNumber *)[someOtherArray objectAtIndex:i+1] floatValue];
float myResult = myFloatValue + myOtherFloatValue;
Run Code Online (Sandbox Code Playgroud)
我只是想知道我是否错过了一个技巧,通过手写输入全部.我应该使用NSArray的替代品吗?拳击/拆箱有快捷方式吗?
或者我想,我应该习惯它并停止抱怨;)
您可以创建一个类别:
@class NSArray (FloatHelper)
- (float) floatAtIndex:(NSUInteger)i;
@end
@implementation NSArray (FloatHelper)
- (float) floatAtIndex:(NSUInteger)i {
return [[self objectAtIndex:i] floatValue];
}
@end
Run Code Online (Sandbox Code Playgroud)
(未经测试且没有错误处理,这显然不是一个好主意.)
然后它可以使用如下:
float a = [array floatAtIndex:1];
Run Code Online (Sandbox Code Playgroud)