Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSFastEnumeration in Swift

I am trying to convert an Objective-C project to swift, but I am unable to find how to use NSFastEnumeration for an object of a class that conforms to NSFastEnumeration.

Here is the code in ObjC:

//  get the decode results
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];

ZBarSymbol *symbol = nil;
for(symbol in results)
    // just grab the first barcode
    break;

so far I tried to find how to do this, but this doe not seems work, here is the swift code:

var results: ZBarSymbolSet = infoDictionary?.objectForKey(ZBarReaderControllerResults) as ZBarSymbolSet

    var symbol : ZBarSymbol? = nil;

    for symbol in results
    {    //just grab first barcode
        break;
    }

the error comes in for condition - "ZBarSymbolSet" does not have a member named "Generator"

What am I doing wrong?

Here is the screen shot enter image description here

like image 452
Sharon Nathaniel Avatar asked Sep 11 '14 13:09

Sharon Nathaniel


1 Answers

After a while poking around the swift framework files, I finally found this nice class called NSFastGenerator. NSSet and friends seem to be using the same Generator.

For ZBarSymbolSet, here's how you'd extend it to support for-in loops:

extension ZBarSymbolSet: SequenceType {
    public func generate() -> NSFastGenerator {
        return NSFastGenerator(self)
    }
}

Update: Looks like Swift 2.0's protocol extensions fixed this for us!

like image 94
John Estropia Avatar answered Oct 16 '22 04:10

John Estropia