Objective-C正确设置实例变量语法

Objective-C正确设置实例变量语法,objective-c,syntax,instance-variables,Objective C,Syntax,Instance Variables,首先,让我说声谢谢你在这个问题上帮助我。我目前正在尝试学习Objective-C。我第一次开始学习Java是在AP计算机科学(在我高中教)游戏中。。。然而,我一直在尝试从Java扩展到Objective-C。主要是为了让我可以在iPhone应用程序的制作上无所事事。我已经读了不少指南,但我一直被卡住,不知所措,所以我只是停止我正在做的事情,回到java。。然而,这次我决心克服这个小问题!感谢所有回复!这是我的VectorObject类,我将在我的Sprite 2-D游戏测试项目中使用它。但是,我

首先,让我说声谢谢你在这个问题上帮助我。我目前正在尝试学习Objective-C。我第一次开始学习Java是在AP计算机科学(在我高中教)游戏中。。。然而,我一直在尝试从Java扩展到Objective-C。主要是为了让我可以在iPhone应用程序的制作上无所事事。我已经读了不少指南,但我一直被卡住,不知所措,所以我只是停止我正在做的事情,回到java。。然而,这次我决心克服这个小问题!感谢所有回复!这是我的VectorObject类,我将在我的Sprite 2-D游戏测试项目中使用它。但是,我在使用一般的Objective-C语法时遇到了问题。我尝试过几种不同的方法,但似乎都无法奏效,我只是犯了一些错误

TLDR:这是我的类,我试图用所需的实例变量创建一个VectorObject,但我不知道如何正确地将参数添加到实例变量中。

#import <Foundation/Foundation.h>

@interface VectorObject : NSObject

@property(nonatomic) BOOL alive;
@property(nonatomic) NSDecimal *x;
@property(nonatomic) NSDecimal *y;
@property(nonatomic) NSDecimal *velX;
@property(nonatomic) NSDecimal *velY;
@property(nonatomic) NSDecimal *maxVelX;
@property(nonatomic) NSDecimal *maxVelY;
@property(nonatomic) NSDecimal *moveAngle;
@property(nonatomic) NSNumber *faceAngle;

- (void)incX:(NSDecimal *) x;
- (void)incY:(NSDecimal *) y;
- (void)incVelY:(NSDecimal *) velY;
- (void)incVelX:(NSDecimal *) velX;
- (void)incFaceAngle:(NSDecimal *) faceAngle;
- (void)incMoveAngle:(NSDecimal *) moveAngle;
+ (NSDecimal)calcAngleMoveX:(NSDecimal *) ang;
+ (NSDecimal)calcAngleMoveY:(NSDecimal *) ang;

@end
因此,我知道在Java中,我可以简单地定义incX(双x),就像这样

public void incX(double x)
{
    this.x += x;
}
但我不确定如何在Objective-C中做到这一点?

-(void)incX:(NSDecimal *)x
{
     self.x += [NSDecimal *] x;
}
编辑:所有语法提示、一般实现等都将得到赞赏并投入使用

self.x += [NSDecimal *] x;
不,那不太对。改为这样做:

self.x = [self.x decimalNumberByAdding:x];
使用
NSDecimalNumber
时,请查看以了解可以使用哪些方法,并记住NSDecimalNumber对象是不可变的,因此对它们的操作将返回新对象

一个小问题:如果您为要添加的号码使用不同的名称,可能会少一点混乱,例如:

-(void)incX:(NSDecimalNumber *)increment
{
     self.x = [self.x decimalNumberByAdding:increment];
}
不,那不太对。改为这样做:

self.x = [self.x decimalNumberByAdding:x];
使用
NSDecimalNumber
时,请查看以了解可以使用哪些方法,并记住NSDecimalNumber对象是不可变的,因此对它们的操作将返回新对象

一个小问题:如果您为要添加的号码使用不同的名称,可能会少一点混乱,例如:

-(void)incX:(NSDecimalNumber *)increment
{
     self.x = [self.x decimalNumberByAdding:increment];
}
不,那不太对。改为这样做:

self.x = [self.x decimalNumberByAdding:x];
使用
NSDecimalNumber
时,请查看以了解可以使用哪些方法,并记住NSDecimalNumber对象是不可变的,因此对它们的操作将返回新对象

一个小问题:如果您为要添加的号码使用不同的名称,可能会少一点混乱,例如:

-(void)incX:(NSDecimalNumber *)increment
{
     self.x = [self.x decimalNumberByAdding:increment];
}
不,那不太对。改为这样做:

self.x = [self.x decimalNumberByAdding:x];
使用
NSDecimalNumber
时,请查看以了解可以使用哪些方法,并记住NSDecimalNumber对象是不可变的,因此对它们的操作将返回新对象

一个小问题:如果您为要添加的号码使用不同的名称,可能会少一点混乱,例如:

-(void)incX:(NSDecimalNumber *)increment
{
     self.x = [self.x decimalNumberByAdding:increment];
}

在Java中,您使用了
double
——这是一种基本值类型,而不是对象。标准数学运算可与
double

在Objective-C中,您使用了
NSDecimalNUmber*
-这是一个指向值类型的指针,它也不是一个对象,但您可能打算使用
NSDecimalNUmber*
,它是。必须使用类型提供的函数(
NSDecimalNumber
)或方法(
NSDecimalNumber
),不能使用标准的数学运算


为什么不在Objective-C中使用
double
,它是一种标准的原语值类型。还有精度较低的
float

在Java中,您使用了
double
-这是一种基本值类型,不是对象。标准数学运算可与
double

在Objective-C中,您使用了
NSDecimalNUmber*
-这是一个指向值类型的指针,它也不是一个对象,但您可能打算使用
NSDecimalNUmber*
,它是。必须使用类型提供的函数(
NSDecimalNumber
)或方法(
NSDecimalNumber
),不能使用标准的数学运算


为什么不在Objective-C中使用
double
,它是一种标准的原语值类型。还有精度较低的
float

在Java中,您使用了
double
-这是一种基本值类型,不是对象。标准数学运算可与
double

在Objective-C中,您使用了
NSDecimalNUmber*
-这是一个指向值类型的指针,它也不是一个对象,但您可能打算使用
NSDecimalNUmber*
,它是。必须使用类型提供的函数(
NSDecimalNumber
)或方法(
NSDecimalNumber
),不能使用标准的数学运算


为什么不在Objective-C中使用
double
,它是一种标准的原语值类型。还有精度较低的
float

在Java中,您使用了
double
-这是一种基本值类型,不是对象。标准数学运算可与
double

在Objective-C中,您使用了
NSDecimalNUmber*
-这是一个指向值类型的指针,它也不是一个对象,但您可能打算使用
NSDecimalNUmber*
,它是。必须使用类型提供的函数(
NSDecimalNumber
)或方法(
NSDecimalNumber
),不能使用标准的数学运算


为什么不在Objective-C中使用
double
,它是一种标准的原语值类型。还有精度较低的
float

您需要知道的一件事是,iOS和OS X包装了基本类型,并提供了帮助您使用它们的函数。他们在b/c模式下完成了这项工作。包装器对基本类型(如浮点型和双精度型)从硬件和芯片对大小的依赖性等方面进行了抽象。所以,希望这能帮助您了解在Objective-C中在iOS和OSX上使用数字的选项

NSDecimal结构是iOS和OS X Objective-C中的“基础”类型。它们是“C”结构。下面指向文档的链接将进入更多页面