Swift:“数据”类型的值错误以键入“数据”
Posted
技术标签:
【中文标题】Swift:“数据”类型的值错误以键入“数据”【英文标题】:Swift : Error on value of type 'Data' to type 'Data' 【发布时间】:2018-11-15 14:30:22 【问题描述】:我有一些使用 AVKit 和 AVCapturePhotoCaptureDelegate 的相机功能。
import UIKit
import AVKit
class CaptureImageClass: NSObject, AVCapturePhotoCaptureDelegate
var photoData: Data?
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)
if let error = error
print("Error capturing photo: \(error)")
else
photoData = photo.fileDataRepresentation() //Cannot assign value of type 'Data?' to type 'Data?'
func capture(_ output: AVCapturePhotoOutput, didFinishCaptureForResolvedSettings resolvedSettings: AVCaptureResolvedPhotoSettings, error: Error?)
guard let photoData = photoData else
print("No photo data resource")
return
let capturedImage = UIImage.init(data: photoData , scale: 1.0) //Cannot convert value of type 'Data' to expected argument type 'Data'
if let image = capturedImage
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
当我制作独立项目时,此代码编译没有问题。但是当我尝试申请另一个项目时,它会出现一些错误,例如Cannot assign value of type 'Data?' to type 'Data?'
和Cannot convert value of type 'Data' to expected argument type 'Data'
这个问题是不是 Swift 版本不同造成的?
注意:
这个“另一个项目”部署目标是 ios 10 和 swift 3 并使用 func capture
为 didFinishCaptureForResolvedSettings
而不能使用 func photoOutput
我的独立项目使用 Swift 4 运行,部署目标是 iOS 11.3
【问题讨论】:
您是否在某处定义了另一个名为Data
的类型?
【参考方案1】:
检查错误是否不是您设备的iOS版本引起的。
请记住
func photoOutput(_ output: AVCapturePhotoOutput,
didFinishProcessingPhoto
photo: AVCapturePhoto,
error: Error?)
适用于 iOS11 及更高版本,适用于 iOS10 及更早版本您应该使用
optional func photoOutput(_ output: AVCapturePhotoOutput,
didFinishProcessingPhoto photoSampleBuffer: CMSampleBuffer?,
previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?,
resolvedSettings: AVCaptureResolvedPhotoSettings,
bracketSettings: AVCaptureBracketedStillImageSettings?,
error: Error?)
还有
fileDataRepresentation()
适用于 iOS11 及更高版本
希望对你有帮助...
【讨论】:
【参考方案2】:有人重写了Data
类型。您可以使用以下方法绕过它:
var photoData: Swift.Data?
【讨论】:
【参考方案3】:通过使用解决 func capture(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, previewPhotoSampleBuffer: CMSampleBuffer?, 已解决设置:AVCaptureResolvedPhotoSettings, 括号设置:AVCaptureBrackedStillImageSettings?, 错误:错误?)
// Make sure we get some photo sample buffer
guard error == nil,
let photoSampleBuffer = photoSampleBuffer else
print("Error capturing photo: \(String(describing: error))")
return
// Convert photo same buffer to a jpeg image data by using // AVCapturePhotoOutput
guard let imageData =
AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: photoSampleBuffer, previewPhotoSampleBuffer: previewPhotoSampleBuffer) else
return
let dataProvider = CGDataProvider(data: imageData as CFData)
let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: CGColorRenderingIntent.absoluteColorimetric)
let image = UIImage(cgImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.right)
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
【讨论】:
以上是关于Swift:“数据”类型的值错误以键入“数据”的主要内容,如果未能解决你的问题,请参考以下文章
无法分配“NSDictionary”类型的值?键入“字符串?”
尝试在 2 个控制器之间传递数据时,我收到错误无法分配类型“ViewController.Item?”的值键入“项目?”,
Java JPA 错误;您试图从查询字符串中设置类型类数据预期类型 int 的值
尝试传递标签的值但收到错误“无法分配类型为“组织?”的值?键入“字符串”
firebase swift 3 转换:无法将类型“(_)->()”的值转换为预期的参数类型“((错误)-> Void)?