- @符号:
OC中@符号就代表是C语言的扩展;
@interface Circle : NSObject{
ShapeColor fillcolor;
ShapeRect bounds;
}
-(void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end// Circle
- Circle 类的声明,以@开头,表示是OC语言,
- NSObject是继承自该类的意思;
- 该类有两个实例变量和3个方法,每次创建对象,对象中都将包含着两个实例变量,
-
- (void) 前面的短线表示这是OC方法的声明,()内是返回值;
-
- (void) setFillColor: (ShapeColor) fillColor;,方法名setFillColor后面的冒号 告诉编译器和编程人员后面将出现参数;
- 冒号的使用注意: 如果方法需要使用参数,则需要冒号,否则不需要冒号;
- 中缀符的使用: [circle setFIllColor : kRedColor] 方法的名称和参数在一起,circle是类的实例,serFillColor是方法名, kRedolor是被传递的参数,如果需要传递多个参数,直接在后面写参数名: 参数即可,如:
[textThing setStringValue : @"there" color: kBLueColor]
其中,setStringValue和color是参数的名称,@"there"和kBLueColor是被传递的参数.
@end //Circle
- 最后这行告诉编译器我们已经完成了Circle这个类的声明,最后添加注释注明类名,可以方便的知道当前是哪个类.
不写@end会报错.
练习使用类的定义和调用practise如下:
//
// main.m
// test1
//
// Created by mac on 2020/12/29.
// Copyright © 2020 BlueBerry. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef enum{ //枚举定义形状
kCircle,
kRectangle,
kEgg
} ShapeType;
typedef enum{ //枚举定义颜色
kRedColor,
kGreenColor,
kBlueColor
} ShapeColor;
typedef struct{
int x, y, width, height;
} ShapeRect;
typedef struct{
ShapeType type;
ShapeColor fillColor;
ShapeRect bounds;
}Shape ;
NSString *colorName(ShapeColor colorName){
switch(colorName){
case kBlueColor:
return @"blue";
break;
case kRedColor:
return @"red";
break;
case kGreenColor:
return @"green";
break;
}
return @"no clue";
}
//_________________
//ALl about Circle
@interface Circle : NSObject{
ShapeColor fillcolor;
ShapeRect bounds;
}
-(void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end// Circle
@implementation Circle
- (void) setFillColor: (ShapeColor) c
{
fillcolor = c;
}//setFillColor
- (void) setBounds:(ShapeRect) b{
bounds = b;
}// setBounds
- (void) draw {
NSLog(@"drawing a circle at (%d %d %d %d) in %@", bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillcolor));
} //draw
@end // Circle
//_________________
//ALl about Rectangle
@interface Rectangle : NSObject
{
ShapeColor fillcolor;
ShapeRect bounds;
}
-(void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end// Rectangle
@implementation Rectangle
- (void) setFillColor: (ShapeColor) c
{
fillcolor = c;
}//setFillColor
- (void) setBounds:(ShapeRect) b{
bounds = b;
}// setBounds
- (void) draw {
NSLog(@"drawing a Rectangle at (%d %d %d %d) in %@", bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillcolor));
} //draw
@end //Rectangle
//_________________
//ALl about Egg
@interface Egg : NSObject
{
ShapeColor fillcolor;
ShapeRect bounds;
}
-(void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end// Egg
@implementation Egg
- (void) setFillColor: (ShapeColor) c
{
fillcolor = c;
}//setFillColor
- (void) setBounds:(ShapeRect) b{
bounds = b;
}// setBounds
- (void) draw {
NSLog(@"drawing a Egg at (%d %d %d %d) in %@", bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillcolor));
} //draw
@end //Egg
int main(int argc, const char * argv[]) {
id shapes[3];
ShapeRect rect0 = {0,0,10,30};
shapes[0] = [Circle new];
[shapes[0] setBounds: rect0];
[shapes[0] setFillColor: kRedColor];
ShapeRect rect1 = {30, 40, 50, 60};
shapes[1] = [Rectangle new];
[shapes[1] setBounds: rect1];
[shapes[1] setFillColor: kGreenColor];
ShapeRect rect2 = {15, 19, 37, 29};
shapes[2] = [Egg new];
[shapes[2] setBounds:rect2];
[shapes[2] setFillColor:kBlueColor];
return 0;
} // main