enumerateObjects(options:using:) exists on NSArray in Swift. And I was able to 
create your generic class just fine:

class Test<T> {
    var array: [T] = []
    
    init() {
        var temp = array as NSArray
    }
}

I’m not sure what the canonical parallel array enumeration would be, but you 
can do it using concurrentPerform:

let array = [“one”, “two”]
DispatchQueue.concurrentPerform(iterations: array.count) { index in
    print(array[index])
}


> On Jan 23, 2017, at 8:20 PM, Doug Hill via swift-users 
> <swift-users@swift.org> wrote:
> 
> I'm trying to accomplish the equivalent functionality of -[NSArray 
> enumerateUsingObjects:…] in Swift. Doing a Googles search, I see that one 
> would need to call the equivalent method on the bridged NSArray version of 
> your Swift array:
> 
> var myNSArray : NSArray = mySwiftArray as NSArray
> 
> Here's the problem I'm running into; I have the following class:
> 
> class Tester<typeA>
> {
>       var myArray : [typeA]
> 
>       init()
>       {
>               var temp = self. myArray as NSArray
>       }
> }
> 
> Which produces a compiler error:
> 
> 'cannot convert value of type '[typeA]' to type 'NSArray' in coercion'
> 
> Ok, this makes some sense since I'm guessing NSArray requires each element to 
> to be an NSObject but this array type Array<typeA> could be a non-NSObject.
> 
> However, this makes my code harder to write since I now have to make sure any 
> array has element type NSObject to use enumerateUsingObjects. Not something I 
> can either guarantee or even desire.
> 
> The reason I like enumerateUsingObjects is that it supports a functional 
> style of programming and is better at creating work items for each object by 
> dispatching each array item on multiple cores/processors/threads for me. 
> Writing this method myself would require figuring out to pass an object to a 
> dispatch invocation. But looking through the swift API's, I don't see any GCD 
> method for passing an object to dispatch_sync/async. I see versions of these 
> methods that takes a context parameter but then takes a C function instead of 
> a block, so not very Swift-like and potentially unsafe.
> 
> Does this mean enumerateUsingObjects is generally not all that useful in 
> Swift? Are there better alternatives? Any ideas on how best to handle this 
> situation would be appreciated.
> 
> Doug Hill
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to