我想将以下3种方法从java-actionscript转换为Objective C.
我认为部分困惑是不知道我应该使用什么数字类型,原语。即在actionscript中你只有Number,int和uint。这些是我试图转换的3个函数
public function normalize(value:Number, minimum:Number, maximum:Number):Number
{
return (value - minimum) / (maximum - minimum);
}
public function interpolate(normValue:Number, minimum:Number, maximum:Number):Number
{
return minimum + (maximum - minimum) * normValue;
}
public function map(value:Number, min1:Number, max1:Number, min2:Number, max2:Number):Number
{
return interpolate( normalize(value, min1, max1), min2, max2);
}
这是我到目前为止所拥有的
-(float) normalize:(float*)value
withMinimumValue:(float*)minimum
withMaximumValue:(float*)maximum
{
return (value - minimum) / (maximum - minimum);
}
-(float) interpolate:(float*)normValue
withMinimumValue:(float*)minimum
withMaximumValue:(float*)maximum
{
return minimum + (maximum - minimum) * normValue;
}
-(float) map:(float*)value
withMinimumValue1:(float*)min1
withMaximumValue1:(float*)max1
withMinimumValue2:(float*)min2
withMaximumValue2:(float*)max2
{
return interpolate( normalize(value, min1, max1), min2, max2);
}
答案 0 :(得分:1)
如果您正在寻找可以处理非整数值的基本类型(不是对象),float
可能没什么问题(或者CGFloat,正如Chris所建议的那样)
除非你的函数需要修改它们的参数,否则你希望参数只是float
而不是float *
。
您正在混合使用Objective-C消息传递和普通C函数调用语法:您的示例将它们声明为实例方法,但您将它们称为函数(不起作用)。
为了匹配您的声明,调用看起来像:
return [self interpolate:
[self normalize:value withMinimumValue:min1 withMaximumValue:max1]
withMinimumValue:min2
withMaximumValue:max2];
interpolate
,normalize
和map
方法不依赖于当前对象实例中的任何变量,因此它们可能更适合作为Objective-C类方法(甚至更好)作为普通的C函数)。答案 1 :(得分:1)
鉴于你的方法都不需要任何其他状态,所有这些都是基本的数学类型,而且都非常简单,我会完全跳过Objective-C而只是直接使用C.有点像:
static inline float normalize(float val, float min, float max) {
return (val - min) / (max - min);
}
将其粘贴到项目中的某个头文件中并完成它。对interpolate
和map
执行相同操作。
注意:正如其他人所提到的,如果需要,您可能希望将类型更改为CGFloat。
答案 2 :(得分:0)
假设您正在使用Apple的框架,这些是您可能想要使用的转换:
Number
=〜CGFloat
int
=〜NSInteger
uint
=〜NSUInteger