2015-06-26 9 views
9

Właśnie zaktualizowałem wersję beta Xcode 7 ze Swift 2.0. I kiedy zaktualizowałem swój projekt do Swift 2.0, otrzymałem ten błąd: "Typ" OSType "nie jest zgodny z protokołem" AnyObject "w Swift 2.0". Mój projekt działa idealnie w Swift 1.2. A oto kod dostaje błąd:Typ "OSType" nie jest zgodny z protokołem "AnyObject" w 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) 
     } 

Próbowałem przekonwertować kCVPixelFormatType_32BGRA do AnyObject ale to nie działa. Czy ktoś mógłby mi pomóc? Przepraszamy za mój zły angielski! Dziękuję Ci!

Odpowiedz

33

Jest to definicja kCVPixelFormatType_32BGRA w Swift 1.2:

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

to jej definicja w Swift 2.0:

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

Właściwie OSType jest UInt32 który nie może niejawny przekonwertować na 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

Więc spróbuj tego:

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

lub

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

To rzeczywiście rozwiązuje problem. Ale twoja odpowiedź byłaby jeszcze bardziej pomocna z * wyjaśnieniem * dlaczego jest to konieczne, w szczególności, ponieważ kod OP pracował w Swift 1.2. –

+0

Dzięki. Mi to pasuje. – hiennv92

+1

@MartinR Witam, zaktualizowałem swoją odpowiedź ... Mam nadzieję, że może to wyjaśnić jaśniej. – Bannings

Powiązane problemy