2015-03-30 3 views
2

Вложения - это CFDictionaryRef. Как выполнить функцию (_bridge NSDictionary *) в Swift?Как это преобразовать в Swift?

CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer 
                options:(__bridge NSDictionary *)attachments]; 

UPDATE

здесь полный код раздела я попытался для создания CIImage.

func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) { 

    var pixelBuffer:CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer) 
    var attachmentMode = CMAttachmentMode(kCMAttachmentMode_ShouldPropagate) 
    var attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer, attachmentMode) 
    var ciImage:CIImage = CIImage(CVPixelBuffer: pixelBuffer, options: attachments) 

} 

ОТВЕТ

@ ответ NobodyNada является правильным, а потому, что вложения является «неуправляемый» CFDictionary вы должны принять unretainedValue словаря для того, чтобы устранить ошибку. Правильный ответ:

var ciImage:CIImage = CIImage(CVPixelBuffer: pixelBuffer, options: attachments.takeUnretainedValue()) 

ответ

4

Это называется бесплатным шунтированием, и это позволяет конвертировать между определенными типами Foundation и CoreFoundation с простым броском. Объект __bridge был добавлен с ARC, потому что без него ARC не смог найти достаточную информацию об этом. NSDictionaries и CFDictionaries являются взаимозаменяемыми в Swift без броска:

let ciImage = CIImage(buffer: pixelBuffer, options: attachments).takeUnretainedValue() 

P. S. Привет еще раз :) Извините, что я не мог ответить на ваш другой вопрос; Мне пришлось внезапно уйти.

+0

Здравствуйте! haha ... когда я использую предоставленный вами код, я получаю опции «дополнительный аргумент» ошибки «в вызове». Я думаю, это может быть потому, что вложения - неуправляемый CFDictionaryRef. Вот почему я думал, что мне нужна какая-то мостовая функциональность – user3353890

+0

Я включил, как я создаю вложения в своем исходном вопросе – user3353890

+0

Хорошо, я исправил это! – NobodyNada

Смежные вопросы