属性的赋值的限制 setter/getter方法(判断传入的额数据是否符合逻辑处理,否则做默认处理)

来源:互联网 发布:我们不一样知乎 编辑:程序博客网 时间:2024/06/05 11:26

 属性的封装

   再为对象的属性,赋值的时候,做一个逻辑验证,如果为属性赋的值再这个逻辑范围之内,那么我们就吧这个赋值给属性,否则我们就做处理。

   就想对人类的——age赋值,是否在0-200,否则就会做默认处理,

   如何对这个属性给一个限制

 如何实现:降属性的这public 去掉,一旦写@public就意味可以直接访问对象的这个属性,外界一旦可以直接访问这个属性,那么外界就可以任意的为这个属性赋值

 去掉这个@public 外界无法直接访问这个属性,也就无法赋值了

 

 为类提供一个方法,这个方法为属性赋值,这个方法我们叫做setter 

 这个方法对象方法,因为要为这个属性赋值,

 这个方法没有返回值,因为这个方法做的事情,仅仅是为属性赋值就可以了

 这个方法的名称必须为set开头跟上首字母大写的属性(规范)

 这个方法一定是有参数的,参数的类型和属性的类型一致,参数的名称和属性额名称一致

 在这个方法的实现之中,判断传入的额数据是否符合逻辑处理,否则做默认处理

 外界想要为对象的属性赋值,那么就要调用这个对象的setter方法,将要赋值的这个数据传入这个方法,方法会对数据尽享验证,看是否符合要求,如果不符合就是默认的。。。。

 

 

 

 getter这个方法是一个对象方法,因为这个方法做的事情是拿到属性的返回值

       这个方法是有返回值返回值的类型和属性的类型一直

       这个方法的名称是属性名称就是属性的名称

        z方法是没有参数

       实现是直接讲属性的返回

       这个时候,如果外界希望得到这个属性的值,那么就只需要调用这个getter方法就可以了

如下

Person.h中

#import <Foundation/Foundation.h>


@interface Person : NSObject

{

        NSString *_name;

        int _age;

}

//方法的声明

-(void)setAge:(int)age;

-(void)sayHi;

-(void)age;

@end


#import "Person.h"


@implementation Person

-(void)sayHi

{

    NSLog(@"我叫%@,我的年龄是%d",_name,_age);

}

-(void)setAge:(int)age

{

// 这个地方给判断 对其加上限制

    if (age >=0 && age<=200) {

        _age = age;

    }else{

        _age =18;

    }

}

-(void)age

{

    return_age;

}

@end



main函数如下

#import <Foundation/Foundation.h>

#import "Person.h"


int main(int argc,constchar * argv[]) {

    @autoreleasepool {

        Person *p1 = [Personnew];

        [p1 setAge:56123];

        NSLog(@"%@",p1);

//        p1->_age = 1999;

        

//      NSLog(@"%@",[p1 age]);

    }

    return0;

}

超过了给的限制就会给一个默认值处理

 setter/getter方法后面会再加,最近吧知识点都过一遍,整理的有点粗糙




0 0
原创粉丝点击