Re: Value of type '[AnyObject]!' has no member 'Generator'
Re: Value of type '[AnyObject]!' has no member 'Generator'
- Subject: Re: Value of type '[AnyObject]!' has no member 'Generator'
- From: Charles Srstka <email@hidden>
- Date: Mon, 05 Oct 2015 16:06:55 -0500
> On Oct 5, 2015, at 1:42 PM, Jens Alfke <email@hidden> wrote:
>
> The problems in this thread seem to stem from missing or incorrect annotations in one Cocoa class (CIFilter IIRC; I don’t have the whole thread in front of me.)
AVCaptureDevice, actually, but this is exactly it. The problem is that Apple hasn’t gotten to annotating AVCaptureDevice.h yet for Swift interop; in their defense, auditing all of the system frameworks for nullability and collection types is a big task that understandably will take some time to complete. With that said, the offending method is declared like this:
+ (NSArray *)devices;
whereas for Swift interoperability, it should probably be declared like this instead:
+ (nonnull NSArray <AVCaptureDevice *> *)devices;
Once Apple updates the header, the code in the OP should probably work as is without modification. In the meantime, Swift has to assume that the return type is [AnyObject]?, since it can’t know what type the array is supposed to contain, nor whether the array can be nil. The workaround is to explicitly cast and unwrap the array, like so:
if let devices = AVCaptureDevice.devices() as? [AVCaptureDevice] {
for device in devices {
print("Device: \(device)")
for f in device.formats {
print(" format: \(f)")
}
}
}
which should work great. So, it’s not necessarily “Swift sucking” in this case, but rather some of the ObjC header files needing an update. With properly annotated ObjC header files, I’ve found that interop between Swift and ObjC has gotten fairly comfortable in Swift 2.0 / Xcode 7, with the exception of APIs that return non-type-specific values by reference (I’m looking at you, -[NSURL getResourceValue:forKey:error:]).
Charles
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden