It seems to me that you didn't initialize your `myArray` before you casted it. That caused the problem.
Zhaoxin On Tue, Jan 24, 2017 at 9:34 AM, Jon Shier via swift-users < swift-users@swift.org> wrote: > 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 > >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users