Dart和OC的Set、Get方法对比

2022-03-22  本文已影响0人  Hamiltonian
2381647917780_.pic.jpg
在开发中为了保证数据的安全性,往往用set、get方法来约束成员变量的值。例如Person的身高一定为正数,下面以此为案例。
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

上一篇下一篇

猜你喜欢

热点阅读