Flutter----iOS开发眼中的Dart

2020-09-03  本文已影响0人  笑破天

1、每局末尾都要加分号;
2、变量命名

String name = 'kobe';
print('${name} + "brnt");

3、变量类型

var/dynamic/const/final 变量名称 = 赋值;

4、箭头语法(arrow syntax)

sum(num1, num2) => num1 + num2;
movies.forEach((item) => print(item));
//等价于
sum(num1, num2) {
  return num1 + num2;
}
movies.forEach((item) {
    print(item);
  });

5、命名可选参数: {param1, param2, ...}
可以有默认值,可以指定某个参数必选

printInfo(String name, {int age, double height = 170.0, @required String address}) {
  print('name=$name age=$age height=$height address=$address');
}

6、??

name2 ??= 'james'; //为null时,赋值james
var name = temp ?? 'kobe';

7、级联语法:..

final p1 = Person();
  p1.name = 'why';
  p1.run();
  
  final p2 = Person()
              ..name = "why"
              ..run();

8、构造函数

Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  // 等同于
  Person(this.name, this.age);

命名构造函数:假的函数重载

Person.withArgments(String name, int age) {
    this.name = name;
    this.age = age;
  }
var p = new Person.withArgments('kobe', 18);

9、初始化列表(Initializer list)

Point(this.x, this.y) {
    this.x = x;
    this.y = y;
    this.dis = x * x + y * y;
  }
//等价于
Point(this.x, this.y) : dis = x * x + y * y;

10、重定向构造方法

Person(this.name, this.age);
Person.fromName(String name) : this(name, 0);

11、常量构造方法const
传入相同值时,返回同一个对象

class Person {
  final String name;
  const Person(this.name);
}
  var p1 = const Person('why');
  var p2 = const Person('why');
  print(identical(p1, p2)); // true

注意:构造方法和变量名要用const修饰,成员变量要用final修饰

12、工厂构造方法factory
传入相同值时,返回同一个对象

static final Map<String, Person> _cache = <String, Person>{};
  factory Person(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final p = Person._internal(name);
      _cache[name] = p;
      return p;
    }
  }
  Person._internal(this.name);

13、Dart中的继承使用extends关键字
14、抽象类使用abstract关键字
15、implements关键字
默认情况下,定义的每个类都相当于默认也声明了一个接口,可以由其他的类来实现(因为Dart不支持多继承)

abstract class Runner {
  run();
}
abstract class Flyer {
  fly();
}
class SuperMan implements Runner, Flyer {
  @override
  run() {
    print('超人在奔跑');
  }
  @override
  fly() {
    print('超人在飞');
  }
}

16、Mixin with关键字
通过implements实现某个类时,类中所有的方法都必须被重新实现,可以通过mixin关键字来定义一个类,with关键字混入,只重写你需要的方法。

mixin Runner {
  run() {
    print('在奔跑');
  }
}
mixin Flyer {
  fly() {
    print('在飞翔');
  }
}
// implements的方式要求必须对其中的方法进行重新实现
// class SuperMan implements Runner, Flyer {}
class SuperMain with Runner, Flyer {
}

17、泛型:Object/T

class Location {
  Object x;//T x;
  Object y;//T y;
  Location(this.x, this.y);
}
class Location<T extends num> ;//限制类型,只能是num

18、库的使用

import 'dart:io';//dart标准版
import 'package:flutter/material.dart';//Pub包的一些库,三方库
import 'lib/student/student.dart';//自定义的dart文件

//show显示某个成员(屏蔽其他)
import 'lib/student/student.dart' show Student, Person;
//hide隐藏某个成员(显示其他)
import 'lib/student/student.dart' hide Person;

//当各个库有命名冲突的时候,可以使用as关键字来使用命名空间
import 'lib/student/student.dart' as Stu;
Stu.Student s = new Stu.Student();

//自己组合现有的dart文件成自定义的库
library utils;
export "mathUtils.dart";
export "dateUtils.dart";
import "lib/utils.dart";

上一篇 下一篇

猜你喜欢

热点阅读