Objective c Obj C-随机@属性错误

Objective c Obj C-随机@属性错误,objective-c,Objective C,对目标C来说还是个新手,我有一些问题,我自己似乎无法解决。以下前三个@properties中的每一个都会发生两次错误,错误为: 错误:“')‘标记’之前的语法错误” #导入 @接口多边形形状:NSObject{ 整数*边数; int*最小边数; int*最大边数; } @属性(setter=setNumberOfSides)int*numberOfSides; @属性(setter=setMin)int*minimumNumberOfSides; @属性(setter=setMax)int*ma

对目标C来说还是个新手,我有一些问题,我自己似乎无法解决。以下前三个@properties中的每一个都会发生两次错误,错误为: 错误:“')‘标记’之前的语法错误”

#导入
@接口多边形形状:NSObject{
整数*边数;
int*最小边数;
int*最大边数;
}
@属性(setter=setNumberOfSides)int*numberOfSides;
@属性(setter=setMin)int*minimumNumberOfSides;
@属性(setter=setMax)int*maximumNumberOfSides;
@属性(只读,getter=angleInDegrees)float*angleInDegrees;
@属性(只读,getter=angleInRadians)float*angleInRadians;
@属性(只读,getter=name)NSString*name;
-(id)init;
-(id)初始边:(int*)边最小:(int*)最小最大:(int*)最大;
-(无效)解除锁定;
-(BOOL)setNumberOfSides:(int*)num;
-(void)setMin:(int*)num;
-(void)setMax:(int*)num;
-(无效)说明;
-(浮动*)角度指数;
-(浮动*)角半径;
-(NSString*)名称;
@结束
不确定这是否会产生影响,但以下是实施的总结版本:

#import "PolygonShape.h";

@implementation PolygonShape

@synthesize numberOfSides;
@synthesize minimumNumberOfSides;
@synthesize maximumNumberOfSides;

...

- (BOOL) setNumberOfSides: (int*) num {
    if(num > minimumNumberOfSides && num < maximumNumberOfSides) {
        [numberOfSides release];
        numberOfSides = [num retain];
        return YES;
    } else {
        NSLog(@"Number %i is out of range %i to %i", num, minimumNumberOfSides, maximumNumberOfSides);
        return NO;
    }
}

- (BOOL) setMin: (int*) num {
    if(num > 2 && num <= maximumNumberOfSides) {
        [minimumNumberOfSides release];
        minimumNumberOfSides = [num retain];
        return YES;
    } elseif (num > 2 && maximumNumberOfSides == nil) {
        [minimumNumberOfSides release];
        [self setMax: 12];
        minimumNumberOfSides = [num retain];
        return YES;
    } elseif (num > 2) {
        NSLog(@"Polygons must have more than 2 sides.");
        return NO;
    } else {
        NSLog(@"Please enter a number less than or equal to %i, the current maximum", maximumNumberOfSides);
        return NO;
    }
}

- (void) setMax: (int*) num {
    if(num <= 12 && num < maximumNumberOfSides) {
        [maximumNumberOfSides release];
        maximumNumberOfSides = [num retain];
    } elseif (num <= 12) {
        NSLog(@"Please enter a number less than or equal to 12");
    } else {
        NSLog(@"Please enter a number greater than or equal to %i, the current minimum", minimumNumberOfSides);
    }
}

...

@end
#导入“PolygonShape.h”;
@实现多边形
@合成多糖;
@合成最少数量的侧;
@合成最大侧数;
...
-(BOOL)setNumberOfSides:(int*)num{
如果(num>minimumNumberOfSides&&num2&&num 2&&maximumnumnumberofsides==nil){
[释放侧的最小数量];
[自我设定最大值:12];
minimumNumberOfSides=[num retain];
返回YES;
}elseif(数值>2){
NSLog(@“多边形必须有两条以上的边。”);
返回否;
}否则{
NSLog(@“请输入一个小于或等于%i的数字,当前最大值”,maximumNumberOfSides);
返回否;
}
}
-(void)setMax:(int*)num{

if(num我在这里看到了一些需要清理的东西,但最明显的错误是您将基本类型(如int和float)视为指针(您还应该使用NSInteger和CGFloat,但这并不是很重要)。您将需要更改大量代码,因此在担心其他任何事情之前先解决此问题。以下内容可能有助于您了解基本类型和指针之间的区别。

我在这里看到一些需要清理的内容,但最明显的错误是,您将基本类型(如int和float)视为指针(您还应该使用NSInteger和CGFloat,但这并不重要)。您将需要更改大量代码,因此在担心其他事情之前请先解决此问题。以下内容可能有助于您了解基本类型和指针之间的区别。

您在setter属性上使用了错误的选择器。选择器全名包括结尾的冒号:
setNumberOfSides:

它们应该是这样的:

@interface Foo
@property (readwrite, setter = setNumberOfSides:) int numberOfSides;
@end

但有一点是,您指定的名称与自动生成的名称相同,因此您不需要指定setter属性。

您在setter属性上使用了错误的选择器。选择器全名包括结尾的冒号:
setNumberOfSides:

它们应该是这样的:

@interface Foo
@property (readwrite, setter = setNumberOfSides:) int numberOfSides;
@end

但有一点是,您指定的名称与自动生成的名称相同,因此不需要指定setter属性。

关于此代码的更多信息:

  • #import
    指令后面有一个分号
    。这是一个预处理器指令,不是语句,因此不需要(也永远不会有)终止分号

  • 您正在编写
    elseif
    而不是
    else if
    。Objective-C中没有
    elseif
    关键字,只有
    if
    关键字和
    else
    关键字

  • 您同时声明了一个属性(声明了一个setter)和setter方法。Objective-C不需要在类的接口中为类实现的每个方法声明—并且在使用属性时,属性声明就是setter方法声明

  • 您有一个setter,它也有一个返回值。不要这样做

  • 您使用的编码样式与Cocoa标题和示例不同


一般来说,在编写Objective-C代码时,您应该尝试使用与框架标题和示例相同的样式进行编写。例如,您在方法参数/返回类型和方法名称的部分之间添加了空格;这不是Cocoa中常用的编码样式。习惯于常用的编码样式将使其他人更容易使用开发人员可以选择您自己的代码,使您更容易从他人的代码中学习。

关于此代码的更多信息:

  • #import
    指令后面有一个分号
    。这是一个预处理器指令,不是语句,因此不需要(也永远不会有)终止分号

  • 您正在编写
    elseif
    而不是
    else if
    。Objective-C中没有
    elseif
    关键字,只有
    if
    关键字和
    else
    关键字

  • 您同时声明了一个属性(声明了一个setter)和setter方法。Objective-C不需要在类的接口中为类实现的每个方法声明—并且在使用属性时,属性声明就是setter方法声明

  • 您有一个setter,它也有一个返回值。不要这样做

  • 您使用的是不同的编码