【发布时间】:2016-09-14 13:57:07
【问题描述】:
我正在使用这段代码:
func capturePhoto(blockCompletion: @escaping blockCompletionCapturePhoto) {
guard let connectionVideo = self.stillCameraOutput.connection(withMediaType: AVMediaTypeVideo) else {
blockCompletion(nil, nil)
return
}
connectionVideo.videoOrientation = AVCaptureVideoOrientation.orientationFromUIDeviceOrientation(orientation: UIDevice.current.orientation)
self.stillCameraOutput.captureStillImageAsynchronouslyFromConnection(connectionVideo) { (sampleBuffer: CMSampleBuffer!, err: NSError!) -> Void in
if let err = err {
blockCompletion(image: nil, error: err)
}
else {
if let sampleBuffer = sampleBuffer, let dataImage = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer) {
let image = UIImage(data: dataImage)
blockCompletion(image: image, error: nil)
}
else {
blockCompletion(image: nil, error: nil)
}
}
}
}
它在 Swift 2.0 中运行良好,但转换后它不再运行。 这一行:
self.stillCameraOutput.captureStillImageAsynchronouslyFromConnection(connectionVideo) { (sampleBuffer: CMSampleBuffer!, err: NSError!) -> Void in
给我以下错误:
无法将类型 '(CMSampleBuffer!, NSError!) -> Void' 的值转换为预期的参数类型 '((CMSampleBuffer?, Error?) -> Void)!'
我已经尝试了一些方法,但无法解决。 希望有人可以帮助我。
【问题讨论】:
-
我认为
NSError在 Swift 3 中被重命名为Error。只需删除NS就可以了。你迁移你的代码了吗?如果它没有捕捉到那会很奇怪。