如何实现这个需求
- 去掉属性的@public
- 为类提供一个setter方法专门为这个属性赋值
- 这个方法一定是一个对象方法,因为这个要为属性赋值。
- 这个方法没有返回值。
- 这个方法的名称必须以set开头,跟上去掉下划线首字母大写的属性名。
- 这个方法一定有参数,参数的类型和属性的类型一致,参数的名称和属性的名称一致(去掉下划线)。
- 在方法的实现中,判断传入的数据是否符合逻辑,如果符合逻辑则赋值,否则默认处理。
-(void)setAge:(int)age
{
判断语句
}
- 外界想要为对象的属性赋值,那么就调用这个对象的setter方法,将要赋值的数据传入给这个方法。方法会对这个数据进行验证,如果符合验证,就会吧数据赋值给属性,否则做默认处理。
- 外界取出封装的值(getter方法)
- 这个方法一定是一个对象方法,因为这个方法做的事情是拿到属性的返回值。
- 这个方法肯定有返回值,返回值的类型和属性的类型一致。
- 这个方法的名称是属性的名称去掉下划线
- 这个方法没有参数
- 这个方法的实现是直接将属性的值返回
-(int)age
{
return _age;
}
//调用
[p1 age]
- 什么时候需要为属性封装setter和getter?
- 只要属性需要被外界访问,那么就要为这个属性封装setter和getter,哪怕没有逻辑验证。
- 如果属性只在内部访问,就不需要使用
- 只读(只写setter),只写(getter)