在pubspec.yaml中,我使用english_words库生成wordpairs:
dependencies:
flutter:
sdk: flutter
# Contains a few thousand of the most used English words
# plus some utility functions.
english_words: ^3.1.0
现在WordPair类不是String的子类型,所以我不能使用Iterable的lambdas或者像cast或retype这样的函数来演绎' ' WordPairs'到弦乐。
所以,我必须编写名为getWords()的函数。
请参阅下面包含此实现的Dart文件Model.dart。
你会看到旧行注释掉它在getter中返回的类型Iterable。
有没有更有效的方法来做到这一点?
例如,我不想在转换中涉及List Class,但我找不到任何其他方法来成功执行此操作。
感谢。
---------------- Model.dart
import 'package:english_words/english_words.dart' show WordPair, generateWordPairs;
import 'dart:collection';
/// Model Class
///
class Model {
String get randomWordPair => new WordPair.random().asPascalCase;
// Iterable<WordPair> get wordPairs => generateWordPairs().take(10);
Iterable<String> get wordPairs => getWords();
Iterable<String> getWords(){
Iterable<WordPair> pairs = generateWordPairs().take(10);
ListWords<String> words = new ListWords();
for (var pair in pairs) {
words.add(pair.asString);
}
return words;
}
}
class ListWords<E> extends ListBase<E> {
final List<E> l = [];
set length(int newLength) { l.length = newLength; }
int get length => l.length;
E operator [](int index) => l[index];
void operator []=(int index, E value) { l[index] = value; }
}
答案 0 :(得分:1)
乍一看,收集表达式结果的循环通常可以用.map
上适当的Iterable
方法调用替换。看看这是否有帮助。
答案 1 :(得分:0)
在Dart 2中,您可以使用
iterable.cast<NewType>()
但如果经常访问结果列表,则很容易导致效率低下,因为它将原始迭代包装成新的迭代并且必须转发每次访问。
通常效率更高
new List<NewType>.of(oldList)
或
new List.from<NewType.from(oldList)
我无法从文档中获得.of()
和from()
之间的差异(https://api.dartlang.org/dev/2.0.0-dev.50.0/dart-core/List/List.from.html,https://api.dartlang.org/dev/2.0.0-dev.50.0/dart-core/List/List.of.html)