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

Reply via email to