将方法从Java-actionscript转换为Objective C

时间:2010-06-01 02:07:04

标签: objective-c actionscript-3 types


我想将以下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);
 }

3 个答案:

答案 0 :(得分:1)

  • 如果您正在寻找可以处理非整数值的基本类型(不是对象),float可能没什么问题(或者CGFloat,正如Chris所建议的那样)

    < / LI>
  • 除非你的函数需要修改它们的参数,否则你希望参数只是float而不是float *

  • 您正在混合使用Objective-C消息传递和普通C函数调用语法:您的示例将它们声明为实例方法,但您将它们称为函数(不起作用)。

为了匹配您的声明,调用看起来像:

return [self interpolate:
           [self normalize:value withMinimumValue:min1 withMaximumValue:max1]
           withMinimumValue:min2
           withMaximumValue:max2];
  • 由于您的interpolatenormalizemap方法不依赖于当前对象实例中的任何变量,因此它们可能更适合作为Objective-C类方法(甚至更好)作为普通的C函数)。

答案 1 :(得分:1)

鉴于你的方法都不需要任何其他状态,所有这些都是基本的数学类型,而且都非常简单,我会完全跳过Objective-C而只是直接使用C.有点像:

static inline float normalize(float val, float min, float max) {
    return (val - min) / (max - min);
}

将其粘贴到项目中的某个头文件中并完成它。对interpolatemap执行相同操作。

注意:正如其他人所提到的,如果需要,您可能希望将类型更改为CGFloat。

答案 2 :(得分:0)

假设您正在使用Apple的框架,这些是您可能想要使用的转换:

  • Number =〜CGFloat

  • int =〜NSInteger

  • uint =〜NSUInteger