ios - 无法将类型 '(_) -> ()' 的值转换为预期的参数类型 '((Bool, Error?) -> Void)?'

标签 ios iphone swift swift3 ios9

拜托,我需要帮助解决问题,我将 Swift 3 的语法更改为 Swift 4,现在我在识别所有错误时遇到很多问题。最后一行中的函数 savePhoto 出现错误。, completionHandler: { _在

func takePhoto(_ previewLayer: AVCaptureVideoPreviewLayer, location: CLLocation?, completion: (() -> Void)? = nil) {
    guard let connection = stillImageOutput?.connection(with: AVMediaType.video) else { return }

    connection.videoOrientation = Helper.videoOrientation()

    queue.async {
      self.stillImageOutput?.captureStillImageAsynchronously(from: connection) {
        buffer, error in

        guard let buffer = buffer, error == nil && CMSampleBufferIsValid(buffer),
          let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer),
          let image = UIImage(data: imageData)
          else {
            DispatchQueue.main.async {
              completion?()
            }
            return
        }

        self.savePhoto(image, location: location, completion: completion)
      }
    }
  }

  func savePhoto(_ image: UIImage, location: CLLocation?, completion: (() -> Void)? = nil) {
    PHPhotoLibrary.shared().performChanges({
      let request = PHAssetChangeRequest.creationRequestForAsset(from: image)
      request.creationDate = Date()
      request.location = location
    }, completionHandler: { _ in
        DispatchQueue.main.async {
          completion?()
        }
    })
  }

最佳答案

重写为:

}, completionHandler: { (_, _) in

根据 documentationperformChanges(_:completionHandler:) 中的完成处理程序接受两个参数,而不仅仅是一个。 _ in,你用过的,只是一个单一参数的占位符。

关于ios - 无法将类型 '(_) -> ()' 的值转换为预期的参数类型 '((Bool, Error?) -> Void)?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365968/

相关文章:

iphone - 推送通知无法在iPhone应用程序的多个设备上传递?

ios - 是否有可能在2011年以编程方式获取iphone的电话号码?

iphone - 为不同的移动设备提供灵活宽度的网站

arrays - 如何快速将 json 附加到我的数组

ios - Swift:自定义部分标题包含用于删除行或仅为该部分的行添加行的按钮

ios - UIimageview适合圆形

ios - 使用 .m3u8 和 .ts 文件以 iPhone 作为服务器进行直播

ios - 奇尔卡特 iOS10+ RSA 兼容性问题

iphone - 如何将 UIView 拖入表头

arrays - 是否可以在不激活其 DidSet 属性的情况下使数组为空?