4

使用 J2objc 我有一个 JavaUtilList:

var javaArrayList:JavaUtilList = JavaArrayList()

我想将此列表转换为 NSArray:

var arr:[String] = // ????

如何将 JavaUtilList 转换为 Objective-C/Swift NSArray?

4

3 回答 3

1

很好的答案,但 JRE 集合类也支持快速枚举:

+ (NSArray *)nsArrayFromList:(id<JavaUtilList>)list {
  NSMutableArray *result = [NSMutableArray array];
  for (id object in list) {
    [result addObject:object];
  }
  return result;
}
于 2015-04-14T18:19:46.380 回答
1

您可以使用 aniterator来循环浏览每个项目:

static inline NSArray *ArrayWithJavaUtilList(id <JavaUtilList> list)
{
    NSMutableArray *array = [[NSMutableArray alloc] init];
    id <JavaUtilIterator> iterator = [list iterator];
    while ([iterator hasNext]) {
        id object = [iterator next];
        [array addObject:object];
    }

    return [NSArray arrayWithArray:array];
}
于 2015-04-14T17:14:55.887 回答
0

如果您使用 J2OBJC 库来构建项目。然后我们可以更好地使用 IOSObjectArray 而不是 NSArray,因为它通过使用 toArray 函数直接给出 IOSObjectArray。

    **Swift version 5.0**

    **Obtaining object from j2objc generated class as JavaUtilArrayList**
    let a = ObjcgeneratedClassWithj2Objc().methodA(with: fileURL, withLong: 1234556679, withLong: 0)

    **Printing JavaUtilArrayList**
    print("\(String(describing: a))")

    **Creating IOSObjectArray from JavaUtilArrayList**
    let array : IOSObjectArray = (a?.toArray())!

    **Iterating through array length**
    for number in 0..<(array.length()-1) {
        **Getting index-wise models**
        let ar: ClassA = (array.object(at: UInt(number)) ?? 0) as! ClassA

        **Populating another inside IOSObjectArray**
        ar.getGpsData()?.toArray()
    }

很快我将在 github 上发布一个项目,并尝试分享一些 JavaUtilArrayList 到 NSArray 转换的代码,并与 j2objc 人分享

于 2019-11-28T08:07:06.653 回答