为什么Dart String类没有实现可迭代接口?似乎字符串有一个明显的迭代概念,即依次返回每个字符。
答案 0 :(得分:3)
也许不像你想要的那样简洁
String s = 'foo';
s.codeUnits.forEach((f) => print(new String.fromCharCode(f)));
s.runes.forEach((f) => print(new String.fromCharCode(f)));
答案 1 :(得分:2)
回答“为什么”:
Iterable
接口是一个相当重量级的接口(许多成员),用于元素集合。
虽然String
可以被视为List
个字符(但是Dart没有字符类型,所以它实际上是“单字符字符串列表”),不是它的主要用法,而且Iterable
也会混淆实际的String方法。
更好的解决方案是拥有List
的{{1}} 视图。这很容易做到:
String
如果库暴露了用于制作UnmodifiableListView的import "dart:collection";
class StringListView extends ListBase<String> with {
final String _string;
StringListView(this._string);
String operator[](int index) => _string[index];
int get length => _string.length;
void set length(int newLength) { throw new UnsupportedError("Unmodifiable"); }
void operator[]=(int index, String v) { throw new UnsupportedError("Unmodifiable"); }
}
,那会更容易。