美文网首页
Dart和OC的Set、Get方法对比

Dart和OC的Set、Get方法对比

作者: Hamiltonian | 来源:发表于2022-03-22 11:05 被阅读0次
    2381647917780_.pic.jpg
    在开发中为了保证数据的安全性,往往用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
    
    

    相关文章

      网友评论

          本文标题:Dart和OC的Set、Get方法对比

          本文链接:https://www.haomeiwen.com/subject/odhfjrtx.html