4

Using J2objc I have a JavaUtilList:

var javaArrayList:JavaUtilList = JavaArrayList()

I want to convert this list into an NSArray:

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

How can I convert a JavaUtilList into an Objective-C/Swift NSArray?

Michael
  • 32,527
  • 49
  • 210
  • 370

3 Answers3

1

You could use an iterator to cycle through every item:

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];
}
Rufel
  • 2,630
  • 17
  • 15
1

Good answer, but JRE collection classes also support fast enumeration:

+ (NSArray *)nsArrayFromList:(id<JavaUtilList>)list {
  NSMutableArray *result = [NSMutableArray array];
  for (id object in list) {
    [result addObject:object];
  }
  return result;
}
tball
  • 1,984
  • 11
  • 21
  • Which class contains ``nsArrayFromList``? – Michael Apr 14 '15 at 18:27
  • I get the error ``Type 'JavaUtilList' does not conform to protocol 'SequenceType'``when I try your for loop. – Michael Apr 14 '15 at 18:30
  • 1
    Swift added a new requirement j2objc doesn't implement (since it doesn't explicitly support Swift). See http://stackoverflow.com/questions/25563655/type-anyobject-does-not-conform-to-protocol-sequencetype – tball Apr 15 '15 at 19:25
0

If you are using J2OBJC library for building project. Then we can use Better we user IOSObjectArray instead NSArray because it gives directly IOSObjectArray by using toArray function.

    **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()
    }

Soon I will post a project on this on github and try to share some code for JavaUtilArrayList to NSArray conversion also and also share with j2objc guys

Vishal
  • 11
  • 2