iOS 2 setter和getter

今天主要学习的setter和getter的使用方法, 按照昨天所学习的内容,首先我们要创建一个工程,另外在创建一个Person类!

 

=================================================================

在Person.h中 创建Person类中的几个实例变量, 声明setter和getter方法    "上代码"敢问代码是谁!

#import <Foundation/Foundation.h> 

/*

 实例变量可见度

 1.@Public 公共可见度: 在类的内部和外部都可以进行访问,因为外部也可以访问,所以他破坏了类的封装特性.

 2.@Private私有可见度: 只有当前类才可以访问,子类也无法访问,由于子类也无法访问,所以破坏了类的继承特性.

 3.@Protected受保护可见度:当前类以及子类可以访问.(是默认的)也是最适合用的!

 */

@interface Person : NSObject

{

    //定义Person类的实例变量

    NSString *_name;//名字 属于字符串,所以用NSString 并且要带*

    NSString *_sex; //性别 属于字符串,所以用NSString 并且要带*

    NSInteger _age; //年龄 属于常量,所以用int类型,NSInteger是OC中表示常量的,不需要带*

    CGFloat _weight;//体重 数据常量,CGFload相当于fload,所以不需要带*

}

//初始化方法

- (id)init;

 

//自定义初始化方法 形式: initWith + 接口部分的各个参数 例如:

- (id)initWtihName:(NSString *)name

               sex:(NSString *)sex

               age:(NSInteger)age   //参数类型不带*

            weight:(CGFloat)weight; //参数类型不带*

//方法声明  打招呼

- (void)sayHi;

 

//对各个实例变量"统一"设置setter方法

//setter方法的格式set卡头 + 实例变量(去掉下划线,并且首字母大写):(参数类型NSString)参数名

- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight;

//对各个实例变量"分开"设置setter方法

- (void)setName:(NSString *)name;

- (void)setSex:(NSString *)sex;

- (void)setAge:(NSInteger)age;

//(返回值)set(参数名)(参数类型)(参数名)

- (void)setWeight:(CGFloat)weight;

 

//对各个设置好setter方法的实例变量, 分别设置getter方法

//getter格式:返回值为对应实例变量的类型,方法名为实例变量名去掉下划线

- (NSString *)name;

- (NSString *)sex;

- (NSInteger)age;

- (CGFloat)weight;

 

/* 最好把setter和getter方法写在一起例如:

- (void)setName:(NSString *)name;

- (NSString *)name;

*/

@end

 

=================================================================

在Person.m文件中, 实现init方法 实现setter和getter的方法   "上代码" 敢问代码是谁!

#import "Person.h"  //此处不要误解是在Person.h中, 这里就是Person.m文件

@implementation Person

//初始化 对每个实例进行初始的赋值

- (id)init

{

    _name = @"Jack";

    _sex = @"male";

    _age = 30; //常量类型,所以不要用@"30"

    _weight = 160; //age同理

    return self;

}

 

//调用父类系统初始化的过程

- (id)initWtihName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight

{

    self = [super init];//调用父类的方法

    if (self) { //如果调用了父类的方法

        _name = name; // _name是最上面init中的参数, name是initWithName后面的name

        _sex = sex;   // 当在main函数中name传入新值的时候,_name就等于新的名字.

        _age = age;

        _weight = weight;

    }

    return self;

}

 

//========setter(赋值)和getter(取值)方法的实现========//

 

//方法的实现

- (void)sayHi

{

    NSLog(@"人都拥有打招呼的功能");//此处是对Person.h中声明的方法进行具体的实现!

}

 

//对各个实例变量"统一"实现setter(赋值)方法

//对各个实例变量"统一"实现getter(取值)方法

- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight

{

    _name = name;

    _sex = sex;

    _age = age;

    _weight = weight;

}

 

//对各个实例变量"分别"实现setter(赋值)方法

//注:每个方法的实现都是与Person.h中声明的都是一一对应的亲!

- (void)setName:(NSString *)name

{

    _name = name;//将传入进来的name的值赋给_name;可能有点绕,要仔细想想.

}

- (void)setSex:(NSString *)sex

{

    _sex = sex;

}

-(void)setAge:(NSInteger)age

{

    _age = age;

}

- (void)setWeight:(CGFloat)weight

{

    _weight = weight;

}

 

//对各个实例变量"分别"实现getter(取值)方法

//注:每个方法的实现都是与Person.h中声明的都是一一对应的亲!

 

- (NSString *)name //name的getter方法实现

{

    return _name;

    //return回去的是最上面init中的_name 下面的方法同理.

}

- (NSString *)sex //sex的getter方法实现

{

    return _sex;

}

- (NSInteger)age  //age的getter方法实现

{

    return _age;

}

-(CGFloat)weight  //weight的getter方法实现

{

    return _weight;

}

 

//建议书写格式: 可以采用setter和getter方法写在一块的方式

/*

- (void)setName:(NSString *)name

{

    _name = name;

}

-(NSString *)name

{

    return self;

}

*/

@end

=================================================================

在Main函数中,导入Person.h文件, 创建Person类的对象,并且对对象进行赋值,取值     "上代码" 敢问代码是谁!

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[])

{

    //创建一个Person的对象

    Person *per = [[Person alloc] init];

    //给Person的对象per赋值名字

    [per setName:@"Henry"];

    //给对象per赋值性别

    [per setSex:@"male"];

    //给对象per赋值年龄

    [per setAge:30];

    //给对象per赋值体重

    [per setWeight:160];

    //NSLog(@"per的名字是:%@",per);    此时打印per只是打印一个地址, 要给per对象一个指定的打印的实例.

    //如果此时,打印的结果是:    per的名字是:<Person: 0x100201e10>  

  

    NSLog(@"per的名字:%@ 性别:%@ 年龄:%ld 体重:%.2f",[per name],[per sex],[per age],[per weight]);

    //打印结果:per的名字:Henry 性别:male 年龄:30 体重:160.00

    

    //为对象per重新赋值

    [per setName:@"Lily" sex:@"female" age:22 weight:96];

    NSLog(@"per的名字:%@ 性别:%@ 年龄:%ld 体重:%.2f",[per name],[per sex],[per age],[per weight]);

    //打印结果:per的名字:Lily 性别:female 年龄:22 体重:96.00

    //per来调用Person类的方法

    [per sayHi];

    return 0;

}

好了,OC第二个课程学完了, 我也不知道是否会有人看我写的博客, 如果有看到这些的朋友,能够给与一些建议, 因为我也是初学者, 大家互相激励.

今天时间还算早,我在去学习下一章的内容

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。