我正在制作一个应用程序,允许您设置名称和边数,然后应用程序将自动计算形状名称。我被要求将边数从NSNumber
更改为int
。我已经这样做但现在我得到一个错误说“接收器类型不好”。我该怎么做才能纠正这个问题,但要保留副财产的数量为int
?
这是我的类
的头文件#import <Foundation/Foundation.h>
@interface shape : NSObject
@property int *numberOfSides;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *colour;
@property (nonatomic, strong) NSString *calculatedName;
void waitOnCR (void);
- (NSString *)calculatedName;
@end
这是类
的实现文件- (NSString *)calculatedName {
if ([self.numberOfSides isEqual: @3]) {
return self.name = @"Triangle";
}
else if([self.numberOfSides isEqual: @4]) {
return self.name = @"Square";
}
else if([self.numberOfSides isEqual: @5]) {
return self.name = @"Pentagon";
}
else if([self.numberOfSides isEqual: @6]) {
return self.name = @"Hexagon";
}
else if([self.numberOfSides isEqual: @7]) {
return self.name = @"Heptagon";
}
else if([self.numberOfSides isEqual: @8]) {
return self.name = @"Octagon";
}
return [NSString stringWithFormat:@"%@", self.name ];
}
@end
这是主文件
NSLog(@"Enter a number from between 3-8");
int user;
scanf("%d" , &user);
switch (user) {
case 3:
{
shape *myShape = [[shape alloc]init];
[myShape setNumberOfSides:3];
[myShape setColour:@"Red"];
id s2 = [myShape calculatedName];
NSLog(@"The %@ shape has %i sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
break;
}
case 4:
{
{
shape *myShape = [[shape alloc]init];
[myShape setNumberOfSides:@4];
[myShape setColour:@"Blue"];
id s2 = [myShape calculatedName];
NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
break;
}
case 5:
{
shape *myShape = [[shape alloc]init];
[myShape setNumberOfSides:@5];
[myShape setColour:@"Orange"];
id s2 = [myShape calculatedName];
NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
break;
}
case 6:
{
shape *myShape = [[shape alloc]init];
[myShape setNumberOfSides:@6];
[myShape setColour:@"Purple"];
id s2 = [myShape calculatedName];
NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
break;
}
case 7:
{
shape *myShape = [[shape alloc]init];
[myShape setNumberOfSides:@7];
[myShape setColour:@"Green"];
id s2 = [myShape calculatedName];
NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
break;
}
case 8:
{
shape *myShape = [[shape alloc]init];
[myShape setNumberOfSides:@8];
[myShape setColour:@"Pink"];
id s2 = [myShape calculatedName];
NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
break;
}
}
default:
NSLog(@"Shape not found!");
break;
}
答案 0 :(得分:11)
numberOfSides
不是对象,而是基本数据类型int
,而不是:
int *numberOfSides;
你真的想要:
int numberOfSides;
而不是像你的if
语句
if ([self.numberOfSides isEqual: @3]) ...
你想要
if (self.numberOfSides == 3) ...
并且,您的电话如下:
[myShape setNumberOfSides:@4];
应该是:
[myShape setNumberOfSides:4];
(你为“3”而做了这个,但其余部分没有。)
底线,用整数替换所有数字文字(NSNumber
个对象),并用isEqual
替换任何==
。