一,Runes
- 在Dart中,Runes代表字符串的UTF-32字符集, 另一種Strings
- Unicode為每一個字符、標點符號、表情符號等都定義了 一個唯一的數值
- 由於Dart字符串是UTF-16的字符序列,所以在字符串中表達32的字符序列就需要新的語法了
- 通常使用\uXXXX的方式來表示, 這里的XXXX是4個16進制的數, 如,心形符號(♥)是\u2665
- 對於非4個數值的情況,把編碼值放到大括號中即可, 如,笑臉emoji (😆) 是\u{1f600}
- String類有一些屬性可以提取rune信息
- codeUnitAt和codeUnit屬性返回16為字符
- 使用runes屬性來獲取字符串的runes信息
var clapping = '\u{1f44f}';
print(clapping); // 👏
print(clapping.codeUnits); // [55357, 56399]
print(clapping.runes.toList()); // [128079]
- 簡單使用
- 根據字符串創建
Runes runes = new Runes('\u2665, \u{1f605}, \u{1f60e}');
print(runes); // (9829, 44, 32, 128517, 44, 32, 128526) - 輸出特殊字符的字符串
print(new String.fromCharCodes(runes)); // ♥, 😅, 😎
- 根據字符串創建
由於Runes也是繼承於Iterable, 所以Runes中的屬性和方法的使用也和Iterable一樣, 詳情參考Runes和Flutter開發之Dart的數據類型01中的介紹
二,Symbols
- 一個Symbol對象代表Dart程序中聲明的操作符或者標識符
- 也許不會用到Symbol,但是該功能對於通過名字來引用標識符的情況 是非常有價值的,特別是混淆后的代碼,標識符的名字被混淆了,但是Symbol的名字不會改變
- 使用Symbol字面量來獲取標識符的symbol對象,也就是在標識符前面添加一個 # 符號
- 獲取symbol 對象
var sym1 = Symbol('name');
print(sym1); // Symbol("name") - #號創建
var sym2 = #titan;
print(sym2); // Symbol("titan")