在开发中为了保证数据的安全性,往往用set、get方法来约束成员变量的值。例如Person的身高一定为正数,下面以此为案例。
-
初始化Person的时候,传入身高为-100【很明显身高不可能为负数】,身高的Height的set方法会将默认身高165存入。
-
调用对象的属性不会触发对应的set、get方法
-
调用set方法正确的姿势:person3.setHeight = -100;
-
构造方法中需要手动调用set、get方法
Set、Get方法 | Objective-C | Dart |
---|---|---|
如何区别访问变量还是set、get方法 | 不同的访问符区分 | 不同的方法区分 |
如何调用set、get方法 | 直接调用属性即可、也可以调用set、get方法 | 只能调用set、get方法 |
如何调用成员变量 | ->_ [p->_strongStr] | .属性访问成员变量即可 |
学习成本 | 高【需要学习访问符】 | 低【不同的方法区分】 |
Dart的Person调用
Person p = Person(-100);
///输出 p.height = 165 !
print('_MyHomePageState.build ${p.height}');
Dart的 Person定义
class Person {
num _height;
Person(this._height) {
///构造函数需要手动调用set方法
height = _height;
}
get height {
return _height;
}
set height(v) {
///【很明显身高不可能为负数】,身高的Height的set方法会将默认身高165存入。
if (v <= 0) {
_height = 165;
} else {
_height = v;
}
}
}
OC的Person调用【OC的访问控制符是蛮复杂的】
Person * p = [Person new];
//->是访问成员变量,但成员变量默认受保护,所以常常报错,手动设为public即可解决
NSLog(@"bbbb%@",p->_strongStr);
//.(点语法)是访问类的属性,本质是调用set、get方法。
NSLog(@"bbbb%@",p.strongStr);
// 直接访问get方法
NSLog(@"bbbb%@",[p strongStr]);
OC的Person定义
@interface Person : NSObject{
@public
NSString *_strongStr;
}
@property(nonatomic, strong) NSString *strongStr;
@end
#import "Person.h"
@implementation Person
-(void)setStrongStr:(NSString *)strongStr{
if([strongStr isEqualToString:@"rjk"]){
_strongStr = @"666";
}else{
_strongStr = strongStr;
}
}
-(NSString *)strongStr{
if (_strongStr == nil) {
_strongStr = @"new str";
}
return _strongStr;
}
@end
网友评论