前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart学习笔记(二)

Dart学习笔记(二)

作者头像
拉维
发布2019-08-12 15:55:46
8540
发布2019-08-12 15:55:46
举报
文章被收录于专栏:iOS小生活

1,一般而言,当我们定义一个字符串的时候,字符串要用单引号或者双引号括起来,单引号或者双引号的作用是一样的,如下:

代码语言:javascript
复制
  String str1 = '单引号';
  String str2 = "双引号";

当字符串有换行需求的时候,我们可以用\n来代表一个换行符,如下:

代码语言:javascript
复制
  String str1 = '单引号\n这是第二行了';
  print(str1);

打印结果如下:

代码语言:javascript
复制
单引号
这是第二行了

但是有没有一个更加可视化的定义可换行的字符串的方案呢,比如像下面这样直接换行:

代码语言:javascript
复制
  String str2 = "双引号 
  这是第二行了";
  print(str2);

运行之后我们发现,程序报错了。

其实,在Dart中,除了单引号和双引号,还可以用三引号(即三个单引号或者三个双引号)来修饰字符串。使用三引号修饰的字符串可以直接换行,如下所示:

代码语言:javascript
复制
  String str2 = '''双引号 
  这是第二行了''';
  print(str2);

运行之后打印结果如下:

代码语言:javascript
复制
双引号 
  这是第二行了

2,Dart中的数组是List,字典是Map,可以通过is关键字来判断变量的类型,如下所示:

代码语言:javascript
复制
  var map2 = new Map();
  map2['name'] = '李四';
  map2['age'] = 29;
  map2['work'] = ['程序员', '登山运动员'];
  print(map2);

  if (map2 is Map) {
    print('map');
  }

3,Dart中的加减乘除取余,与oc中一致,但是多出了一个~/运算符:两者相除取整。代码如下:

代码语言:javascript
复制
  double a = 13.14;
  int b = 520;
  var f = b/a;
  print(f);
  var h = b~/a;
  print(h);

打印结果如下:

代码语言:javascript
复制
39.5738203957382
39

4,??=运算符。

代码语言:javascript
复制
  double c;
  c = 11;
  c ??= 23;
  print(c);

上面代码的打印结果是:

代码语言:javascript
复制
11.0

为什么不是23呢?因为c ??= 23;这行代码的意思是:如果c为空,那么就将23赋值给c。上例中,在执行c ??= 23;这行代码之前,c就已经被赋值为11,所以最终打印结果是11。

5,??运算符。

代码语言:javascript
复制
void main(){
  var a = 13.14;
  var b;
  print(a ?? 111);
  print(b ?? 222);
}

打印结果如下:

代码语言:javascript
复制
13.14
222

a ?? 111这行代码的意思是:判断a的值是否为空,如果为空则这行代码的值为111;如果a值不为空,则这行代码的值是a的值

6,未赋值的变量。

当一个变量未被赋值的时候,它是null。

代码语言:javascript
复制
  String str;
  print(str);

  int a;
  print(a);
  print(a==0);
  print(a==null);

打印结果如下:

代码语言:javascript
复制
null
null
false
true

该例中,字符串str和数值a均未被赋值,所以其打印结果均为null。

在OC中,如果一个int类型的变量未被初始化,那么默认值为0,但是在Dart中,如果一个int类型的变量未被赋值,那么其值为null,不是0。

7,While和Do-While的区别。

代码语言:javascript
复制
  var i = 10;
  
  while (i<8) {
    print('单身狗');
  }

  do {
    print('幸福美满');
  } while (i<8);

打印结果如下:

代码语言:javascript
复制
幸福美满

while循环是先判断再执行;do-while循环是先执行一次,再判断

8,break和continue

break可以用在switch-case中,也可以用在for循环和while循环中;

在switch-case中使用break,可以使流程跳出switch结构;

在循环结构中使用break,可以使流程跳出当前循环(遇到break,循环就终止,本次循环体接下来的代码也不会执行);

在多层循环中,一个break语句只能向外跳出一层

continue只能用在循环语句中;

continue的作用是使本次循环体结束,即跳过本次循环体中尚未执行的语句,然后进入下次是否执行循环的判断

9,List中的常用属性和方法。

代码语言:javascript
复制
  List mylist = ['111'];
  mylist.add('222');
  mylist.add('333');//给数组增加元素
  mylist.addAll(['444', '555']);//用于拼接数组
  print(mylist.reversed.toList());//对列表倒序排序,并转为List
  print(mylist.isEmpty);//列表是否为空
  print(mylist.isNotEmpty);//列表是否为非空
  print(mylist.indexOf('5575'));//查找数据,找到的话会返回对应的索引值,查找不到就返回-1
  mylist.remove('111');//删除对应的元素
  mylist.removeAt(0);//通过对应元素的索引值删除
  mylist.fillRange(1, 3, '666');//修改相应的元素值
  mylist.insert(1, '777');//插入一个元素
  mylist.insertAll(3, ['888', '999']);//插入多个元素
  print(mylist.join(','));//将List转成字符串String,各个元素间用,分割
  
  var listStr = '1,2,3,4,5,6,7,8,9,10';
  print(listStr.split(','));//将String字符串分割成List数组,分隔符是,

10,Set

Set与List的不同之处在于:Set中元素不可重复,而List中元素可以重复;Set中元素无序,List中元素是有序的。

一般使用Set来对List中的元素去重:将List转成Set,这样获取到的集合的元素就没有重复的了。

11,Map的相关属性和方法

代码语言:javascript
复制
var person = {
  'name':'拉维',
  'age':29,
  'job':'程序员'
};
print(person.keys.toList());//获取到字典中的所有key
print(person.values.toList());//获取字典中的所有value
print(person.isEmpty);//是否为空
print(person.isNotEmpty);//是否不为空
person.addAll({
  'height':176,
  "weight":126
  });//增加元素
person.remove('height');//删除对应元素
print(person.containsKey('height'));//查看有没有对应的key
print(person.containsValue(126));//查看有没有对应的value

12,循环遍历List的几种方式。

代码语言:javascript
复制
  List mylist = [1, 2, 3, 4, 5, 6, 7, 8];
  
  //for循环
  for (var i = 0; i < mylist.length; i++) {
    print(mylist[i]);
  }

  //for-in循环
  for (var a in mylist) {
    print(a);
  }

  //forEach循环遍历集合的每个元素
  mylist.forEach((value){
    print(value);
  });

  //map方法用于遍历处理每一个元素
  var newlist = mylist.map((value){
     //给集合中的每一个值乘以2
    return value*2;
  });
  print(newlist.toList());

  //where用于遍历每一个元素并返回满足判断条件的元素
  var newlist2 = mylist.where((value){
    //这里是判断条件
    return value>6;
  });
  print(newlist2);

  //遍历集合的所有元素,只要有任何一个元素符合判断条件,结果就是true;当所有元素都不符合判断条件的时候,才会返回fault
  bool result1 = mylist.any((value){
    //这里是判断条件
    return value > 7;
  });
  print(result1);

  //遍历集合的所有元素,当每一个元素都满足判断条件的时候才会返回true,有一个元素不满足条件就会返回fault
  bool result2 = mylist.every((value){
    //这里是判断条件
    return value>0;
  });
  print(result2);

虽然这里是以List举例演示,但是对于Set、List以及Map这三种几何形式,以上方法都适用。比如,下面是使用forEach方法来循环Map:

代码语言:javascript
复制
  Map person={
    "name":"张三",
    "age":20
  };

  person.forEach((key, value){
    print('$key---$value');
  });

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档