哪位大佬可以提供自定义Iterable协议的例子?

想自定义一个Iterable协议,不知道怎么写。还看到文档上ArrayList的Iterator无法在ets使用,为啥呢。

阅读 546
1 个回答

口味你好,使用Iterable给类增加迭代能力参考:

class MyIterableClass implements Iterable<number> { 
  private numbers: number[] = [1, 2, 3, 4, 5]; 
 
  // 实现Iterable接口的[Symbol.iterator]方法,返回一个Iterator对象 
  [Symbol.iterator](): ESObject { 
    let index = 0; 
    return { 
      next: (): IteratorResult<number> => { 
        if (index < this.numbers.length) { 
          return { done: false, value: this.numbers[index++] }; 
        } else { 
          return { done: true, value: undefined }; 
        } 
      } 
    }; 
  } 
} 
let num:number 
const iterableInstance = new MyIterableClass(); 
for ( num of iterableInstance) { 
  console.log("输出",num); // 输出1, 2, 3, 4, 5 
}

至于文档描述中说不支持在ets中使用是因为ArkTS不支持symbol,ArkTS只支持Symbol.iterator,因此直接使用Symbol.iterator是可以的,但是构造一个symbol对象,然后使用会报语法错误

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题