我有一个相机代码,可以使用 Vision 检测 UPC 条形码。它在代码的一行上给我一个错误,上面写着: Type of expression is ambiguous without more context。那一行是这样的:
let barcodeRequest = VNDetectBarcodesRequest(completionHandler: { request, error in
。我不确定如何解决它。这是我创建条形码请求的全部代码。
import SwiftUI
import Vision
struct CameraDetail: UIViewControllerRepresentable {
typealias UIViewControllerType = UIImagePickerController
@Binding var image: UIImage?
@Environment(\.presentationMode) var presentationMode
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
picker.sourceType = .camera
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {
}
func makeCoordinator() -> Coordinator {
Coordinator(parent: self)
}
class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
let parent: CameraDetail
init(parent: CameraDetail) {
self.parent = parent
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[.editedImage] as? UIImage ?? info[.originalImage] as? UIImage {
parent.image = image
// convert the captured image to a CIImage
let ciImage = CIImage(image: image)!
// Create a barcode detection request
let barcodeRequest = VNDetectBarcodesRequest(completionHandler: { request, error in
if let results = request.results as? [VNBarcodeObservation], let barcode = results.first?.payloadStringValue {
print("Detected barcode: \(barcode)")
let cameraView = CameraView(barcodeString: barcode)
parent.presentationMode.wrappedValue.dismiss()
if let navigationController = parent.presentationMode.wrappedValue.navigationController {
navigationController.pushViewController(UIHostingController(rootView: cameraView), animated: true)
} else {
print("Error: Parent view controller is not a navigation controller")
}
} else {
print("Error: Failed to detect UPC barcode.")
parent.presentationMode.wrappedValue.dismiss()
}
})
// Perform the barcode detection request
let handler = VNImageRequestHandler(ciImage: ciImage)
do {
try handler.perform([barcodeRequest])
} catch {
print(error)
parent.presentationMode.wrappedValue.dismiss()
}
}
parent.presentationMode.wrappedValue.dismiss()
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
parent.presentationMode.wrappedValue.dismiss()
}
}
}
struct CameraDetail_Previews: PreviewProvider {
static var previews: some View {
CameraDetail(image: .constant(nil))
}
}
我什至不确定这个错误是什么意思或如何修复它。我尝试指定请求和错误,但这并没有改变任何东西。我还尝试添加另一个支架、重新加载项目、清除我的构建缓存,但都没有用。