Swift:如何将从委托接收到的值传递给函数的完成块?
Posted
技术标签:
【中文标题】Swift:如何将从委托接收到的值传递给函数的完成块?【英文标题】:Swift: how to pass a value received from delegate to a function's completion block? 【发布时间】:2020-06-27 15:42:05 【问题描述】:我正在尝试在 Swift 4.2 中使用 AVFoundation 捕获图像 捕获函数位于 CameraEngine 类中,该类基本上用于设置相机。因此,在我的 VC 中,我只需执行 cameraEngine.setup() 即可,一切都已为我们完成。 这是捕获功能:
class CameraEngine: NSObject
private var capturedImageData: Data?
...
func captureImage()
let settings = AVCapturePhotoSettings()
photoOutput?.capturePhoto(with: settings, delegate: self)
print(capturedImageData)
...
extension CameraEngine: AVCapturePhotoCaptureDelegate
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)
self.capturedImageData = photo.fileDataRepresentation()
问题是,如何将委托接收到的值传递给函数并通过完成处理程序返回给 VC?
然后像这样调用我的 VC
cameraEngine.captureImage()
我希望取回数据,以便我可以从我的 VC 中操作它。
【问题讨论】:
【参考方案1】:您可以将完成块作为参数添加到captureImage
方法。将其分配给CameraEngine
引擎类的completion
参数。当收到photoOutput
时,您可以使用这个完成块。方法如下:
class CameraEngine: NSObject
private var capturedImageData: Data?
//...
var completion: ((Data?) -> Void)?
func captureImage(completion: @escaping (Data?) -> Void)
self.completion = completion
//...
//...
extension CameraEngine: AVCapturePhotoCaptureDelegate
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)
completion?(photo.fileDataRepresentation())
用法:
let cameraEngine = CameraEngine()
cameraEngine.captureImage data in
print(data)
【讨论】:
以上是关于Swift:如何将从委托接收到的值传递给函数的完成块?的主要内容,如果未能解决你的问题,请参考以下文章
如何将从数据库接收到的数据作为道具传递给 Reactjs 中的另一个组件
如何将从服务接收到的 json 数据传递到 Angular 4 的角材料组件中的数组
为啥我不能将从 Firestore 获取的值分配给 Swift 中的数组?
将 IndexPath 行值传递给委托函数而不是 Sender.tag 以删除图像项 CollectionView Swift