為了讓類型可以運用在 for ( in ) { } 迴圈上, 需要繼承 IterableBase 並實現 Iterator 介面類型, 總共有 3 個方法需要實現, 詳見以下範例程式 main.dart:
import 'dart:collection';
import 'dart:io';
class Element {
final id;
static int _sn = 0;
Element(): id = ++ _sn;
}
class ABC extends IterableBase<Element> implements Iterator<Element> {
final List<Element> array;
int lastone = 0;// length snapshot
int index = 0;// start snapshot
@override Element get current => array[index];//get 方法 current 實現
@override bool moveNext( ) => index != lastone && (++ index >= 0);//方法 moveNext( )實現
@override Iterator<Element> get iterator {//get 方法 iterator 實現
lastone = array.length - 1;
index = -1;
return this;
}
ABC([List<Element>? mjList]): array = mjList ?? [ ] {
for(int i = 0; i< 10; i++) array.add(Element( ));
}
}
void main( ) {
final a = ABC();
for (final e in a) {
stdout.write("[${a.index}] = ${e.id}, ");
};
print(":: index = ${a.index} lastone= ${a.lastone}\n");
for (final e in a) {
stdout.write("[${a.index}] = ${e.id}, ");
};
print(":: index = ${a.index} lastone= ${a.lastone}\n");
}
執行 dart main.dart 看結果:
[0] = 1, [1] = 2, [2] = 3, [3] = 4, [4] = 5, [5] = 6, [6] = 7, [7] = 8, [8] = 9, [9] = 10, :: index = 9 lastone= 9
[0] = 1, [1] = 2, [2] = 3, [3] = 4, [4] = 5, [5] = 6, [6] = 7, [7] = 8, [8] = 9, [9] = 10, :: index = 9 lastone= 9
沒有留言:
張貼留言