iOS下使用Cycript遍历JavaUtilArrays_ArrayList元素的问题求助
解决Cycript中JavaUtilArrays_ArrayList的遍历与元素访问问题
刚接触Cycript遇到这种情况很正常,你拿到的l是Java层的ArrayList实例,不是JavaScript原生数组,所以JS的for...of、下标l[0]这些语法自然不适用,得用Java集合类本身的方法来操作。刚好你提到优先用类似#element的方式,其实就是调用它的get方法,具体操作如下:
第一步:获取集合长度
先调用Java ArrayList的size()方法拿到元素数量:var count = l.size();第二步:遍历集合(优先用get方法)
用普通for循环配合get(index)来逐个获取元素,这就是你想要的类似#element的访问方式:for (var i = 0; i < count; i++) { var element = l.get(i); // 可以打印元素信息验证,比如: console.log("第" + i + "个元素:" + element.toString()); }额外技巧:转成JS数组方便后续操作
如果之后想复用JS的遍历语法,可以先把Java ArrayList转成JS数组:var jsArr = []; for (var i = 0; i < l.size(); i++) { jsArr.push(l.get(i)); } // 现在就可以用你熟悉的JS方式遍历了 for (var e of jsArr) { console.log(e); }
为什么之前的方法会报错?
你尝试的for (e of l)和l[0]都是JS原生数组的操作逻辑,但JavaUtilArrays_ArrayList是Java虚拟机里的对象,它遵循Java的集合规范,没有实现JS数组的接口,所以Cycript在尝试转换类型时就抛出了那个断言错误。
内容的提问来源于stack exchange,提问作者user1247196
相关产品推荐
相关产品推荐

