9

我刚刚使用 Swift 2.0 更新到 Xcode 7 beta。当我将项目更新到 Swift 2.0 时,我收到了这个错误:“Type 'OSType' does not conform to protocol 'AnyObject' in Swift 2.0”。我的项目在 Swift 1.2 中完美运行。这是代码出错:

videoDataOutput = AVCaptureVideoDataOutput()
        // create a queue to run the capture on
        var captureQueue=dispatch_queue_create("catpureQueue", nil);
        videoDataOutput?.setSampleBufferDelegate(self, queue: captureQueue)

        // configure the pixel format            
        **videoDataOutput?.videoSettings = [kCVPixelBufferPixelFormatTypeKey: kCVPixelFormatType_32BGRA]** // ERROR here!

        if captureSession!.canAddOutput(videoDataOutput) {
            captureSession!.addOutput(videoDataOutput)
        }

我尝试将 kCVPixelFormatType_32BGRA 转换为 AnyObject,但没有成功。任何人都可以帮助我吗?对不起,我的英语不好!谢谢!

4

1 回答 1

33

这是Swift 1.2kCVPixelFormatType_32BGRA中的定义:

var kCVPixelFormatType_32BGRA: Int { get } /* 32 bit BGRA */

这是它在Swift 2.0中的定义:

var kCVPixelFormatType_32BGRA: OSType { get } /* 32 bit BGRA */

实际上OSTypeis aUInt32不能隐式转换为 a NSNumber

当您编写let ao: AnyObject = Int(1)时,实际上并不是将 Int 放入 AnyObject。相反,它隐式地将您的 Int 转换为 NSNumber,这是一个类,然后将其放入。

https://stackoverflow.com/a/28920350/907422

所以试试这个:

videoDataOutput?.videoSettings = [kCVPixelBufferPixelFormatTypeKey: Int(kCVPixelFormatType_32BGRA)]

或者

videoDataOutput?.videoSettings = [kCVPixelBufferPixelFormatTypeKey: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA)
于 2015-06-26T05:33:11.097 回答