Flutter开发:Swift 和 Dart 中 Map 异同点

464 阅读1分钟

Swift 代码如下:

func test() {
    let dic = ["a": ["1", "2", "3",],]

    var list = dic["a"]
    list!.remove(at: 0)
    DDLog(list)
    DDLog(dic)
    
    dic["a"]!.remove(at: 0)
    DDLog(dic)
}

//2021-03-17 17:27:19.264 FirstViewController.swift.test()[line 171]: Optional(["2", "3"])
//2021-03-17 17:27:19.264 FirstViewController.swift.test()[line 172]: ["a": ["1", "2", "3"]]
//2021-03-17 17:27:19.264 FirstViewController.swift.test()[line 175]: ["a": ["2", "3"]]

Dart 代码如下:

  test() {
    var _emap = Map<String, List<String>>();
    // _emap["a"] ??= <String>[],
    _emap["a"] ??= ["1", "2", "3"];

    var list = _emap["a"];
    list.remove("1");
    DDLog(list, StackTrace.current);
    DDLog(_emap, StackTrace.current);
  }
 // flutter: 2021-03-17 09:11:34.375593  SecondPage.dart, SecondPage [line 91]: [2, 3]
 // flutter: 2021-03-17 09:11:34.379511  SecondPage.dart, SecondPage [line 92]: {a: [2, 3]}

操作SwiftDart
修改字典嵌套数组通过变量(var list = dic["a"])操作嵌套数组时,字典中的值不变;修改嵌套数组需要通过dic["a"]...通过变量(var list = _emap["a"];)操作嵌套数组时会直接导致字典的源数据一同发生改变;