Flutter dart对象操作符

 - 条件成员访问 ?.
 - 类型转换 as
 - 类型判断 是否为指定的类型  is  is!
 - 级联操作符
  1. 条件成员访问 ?.
    原因:在不确定对象是否被实例化之前使用 ?. 避免空指针错误的发生
    例如:

    void main(){
      Person person;
      person.work();
    }
    
    
    class Person{
      String name;
      int age;
    
      void work(){
        print("work...");
      }
    
    }
    

    由于Person 没有被实例化 导致调用work() 时出现空对象报错

    lib/Rectangle.dart: Warning: Interpreting this as package URI, 'package:myflutterdemo/Rectangle.dart'.
    Unhandled exception:
    NoSuchMethodError: The method 'work' was called on null.
    Receiver: null
    Tried calling: work()
    #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
    #1      main (package:myflutterdemo/Rectangle.dart:3:10)
    #2      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
    #3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
    
    Process finished with exit code 255
    

    解决方案

    void main(){
      Person person;
      //加入条件操作符
      person?.work();
    }
    
    
    class Person{
      String name;
      int age;
    
      void work(){
        print("work...");
      }
    
    }
    
  2. 类型转换操作符 as
    在这里插入图片描述

    这时类型就变成了dynamic 如何转换成Person 类型那? 使用as

    void main(){
      var person = new Person();
      (person as Person).work();
    }
    
    
    class Person{
      String name;
      int age;
    
      void work(){
        print("work...");
      }
    
    }
    
  3. is is! 判断是否是什么类型
    用于解决直接as导致类型强转错误的问题

    void main(){
      var person;
      person = "";
      if(person is Person){
        person.work();
      }
    }
    
    
    class Person{
      String name;
      int age;
    
      void work(){
        print("work...");
      }
    
    }
    
  4. 级联运算操作符
    用于简化类赋值及操作

    void main(){
      var person;
      person = new Person();
      if(person is Person){
        //级联运算操作
        person..name = "张三"
            ..age = 20
            ..work();
      }
    }
    
    
    class Person{
      String name;
      int age;
    
      void work(){
        print("work...$name / $age");
      }
    
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值