2015-06-26 18 views
9

Tôi vừa cập nhật lên phiên bản Xcode 7 beta với Swift 2.0. Và khi tôi cập nhật dự án của mình lên Swift 2.0, tôi nhận được lỗi này: "Loại 'OSType' không phù hợp với giao thức 'AnyObject' trong Swift 2.0". Dự án của tôi hoạt động hoàn hảo trong Swift 1.2. Và đây là mã đã gặp lỗi:Loại 'OSType' không phù hợp với giao thức 'AnyObject' trong Swift 2.0

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) 
     } 

Tôi đã cố gắng chuyển kCVPixelFormatType_32BGRA thành AnyObject nhưng nó không hoạt động. Bất cứ ai cũng có thể giúp tôi? Xin lỗi vì tiếng Anh tồi tệ của tôi! Cảm ơn bạn!

Trả lời

33

Đây là định nghĩa kCVPixelFormatType_32BGRA trong Swift 1.2:

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

Đây là định nghĩa của nó trong Swift 2.0:

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

Trên thực tế các OSType là một UInt32 mà không thể tiềm ẩn chuyển đổi thành một số NSNumber:

When you write let ao: AnyObject = Int(1) , it isn’t really putting an Int into an AnyObject. Instead, it’s implicitly converting your Int into an NSNumber, which is a class, and then putting that in.

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

Vì vậy, cố gắng này:

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

hoặc

videoDataOutput?.videoSettings = [kCVPixelBufferPixelFormatTypeKey: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA) 
+1

Đó thực sự giải quyết vấn đề. Nhưng câu trả lời của bạn thậm chí sẽ hữu ích hơn với giải thích * tại sao điều này là cần thiết, đặc biệt kể từ khi mã của OP hoạt động trong Swift 1.2. –

+0

Cảm ơn. Nó làm việc cho tôi. – hiennv92

+1

@MartinR Xin chào, tôi đã cập nhật câu trả lời của mình ... Tôi hy vọng rằng nó có thể giải thích rõ ràng hơn. – Bannings

Các vấn đề liên quan