var

Dart中使用var申明一个变量,可以赋值不同的类型,var声明的变量如果没有初始化那么它的值为nil,我们按住command鼠标移动到变量a上可以看到提示dynamic a

  1. void main() {
  2. var a;
  3. print(a);
  4. a = 1;
  5. print(a);
  6. a = 'hello world';
  7. print(a);
  8. }

image.png

final

使用final声明的只能赋值一次的变量。也可以叫做最终变量。

  1. void main() {
  2. final b = 21;
  3. b = 'hello';
  4. }

如果我们再次赋值会报错,即使是同样类型的也不能。
image.png
tips:被final修饰的变量在使用之前必须要被赋值。

  1. void main() {
  2. final b ;
  3. print(b);
  4. }

image.png

const

const修饰的常量在声明的时候就必须要赋值,这个是跟变量不同。当然也不能被修改。

  1. void main() {
  2. const c;
  3. }

image.png

number

数值型numer: int & double

  1. void main() {
  2. num a = 10;
  3. print(a);
  4. a = 1.5;
  5. print(a);
  6. }

image.png
一个整形的数据(int)是没有办法直接被赋值给double类型的。此时把a换成double类型就可以,用double修饰的话实际上是10.0

  1. void main() {
  2. int a = 10;
  3. print(a);
  4. a = 1.5;
  5. print(a);
  6. }

image.png

关于int有一些语法,command点击就能查到,isEven偶数,isOdd奇数

  1. void main() {
  2. int a = 10;
  3. print(a);
  4. print( a.isEven);
  5. }

image.png
算数运算符:+ - * / (四则) %(取模) ~/(取整)

  1. void main() {
  2. int a = 10;
  3. int b = 8;
  4. int c = a + b;
  5. print( a.isEven);
  6. print(a ~/ b); /// 1
  7. print('a + b = ${a + b}'); /// 18
  8. print('a + b = $c'); /// 18
  9. }

如果a是double类型,可以先转成int类型toInt()

  1. void main() {
  2. double a = 10;
  3. int b = 8;
  4. print(a.toInt().isEven);
  5. print(a.toInt() ~/ b);
  6. }

image.png

String

使用单引号和双引号创建

  1. void main() {
  2. var a = 'hello';
  3. var b = "world";
  4. print(a + b);
  5. }

三个引号或者双引号可以创建多行字符串

  1. void main() {
  2. String str1 = "hello"
  3. "world"
  4. "1hang"
  5. "2hang";
  6. print(str1);
  7. String str2 =
  8. '''
  9. 1hang
  10. 2hang
  11. 3hang
  12. ''';
  13. print(str2);
  14. }

使用双引号可以看到这里并没有换行,需要手动添加\n,而三个引号修饰的会自动换行
image.png
在Dart语法中,字符串取值非常简单,可以直接采用下标。append可以直接使用+

  1. void main() {
  2. String str1 = "hello";
  3. print(str1[0]);
  4. print(str1[1]);
  5. print(str1 + 'world');
  6. print(str1 * 2);
  7. }

image.png
Stirng中的转义字符

  1. void main() {
  2. String str2 = 'h\nw';
  3. print(str2);
  4. String str3 = r'h\nw';
  5. print(str3);
  6. print(str2.length); /// 3
  7. print(str3.length); /// 4
  8. }
  9. /// 其他的用法:
  10. /// endsWith 以...结尾
  11. /// startsWith 以...开头

image.png

list

Dart中的列表,类似于OC中的数组。有可变和不可变list, 同时可以存放不同的数据类型。

  1. void main() {
  2. var list1 = [1,2,3,'hello'];
  3. var list2 = const [1,2,3];
  4. print(list1);
  5. list1[3] = 'world';
  6. print(list1);
  7. print(list1.length);
  8. list1.add('value');
  9. print(list1);
  10. }

使用const修饰的是不可变的list,不能被重新赋值。
image.png
同时数组的增删改查也比较简单

  1. list1.insert(0, 0);
  2. list1.removeAt(5);
  3. list1.clear();
  1. void main() {
  2. var list1 = [1,4,2,5,3,9,7,6];
  3. list1.sort();
  4. print(list1);
  5. print(list1.sublist(1,5)); /// 包含前面不包含后面
  6. }

image.png

map

Dart中的map键值对,类似于OC中的字典。也有可变和不可变两种map

  1. void main() {
  2. var json1 = {'one': 1, 'two': 2};
  3. var json2 = const {'one': 1, 'two': 2}; /// 不可变的一般实际中用到的非常之少
  4. print(json1['one']); /// 取值
  5. json1['one'] = 0; /// 赋值
  6. print(json1);
  7. // 常用的操作
  8. print(json1.length);
  9. print(json1.keys);
  10. print(json1.values);
  11. var list = ['hello', 'world'];
  12. print(list.asMap()); /// 数组转map
  13. }

image.png