Ios 额外参数';代表';随时待命(Swift 3)

Ios 额外参数';代表';随时待命(Swift 3),ios,swift,xcode,avfoundation,Ios,Swift,Xcode,Avfoundation,我和代表之间有一些问题。我在谷歌上搜索过,没有找到对我有帮助的答案。所以我写了AVCapturePhotoCaptureDelegate,因为有人告诉我。我应该做什么?(如何处理代表) AVCapturePhotoCaptureDelegate是一个协议。您可以在此处阅读有关协议的更多信息,但相关信息如下: 协议定义了方法、属性和其他属性的蓝图 适合特定任务或功能的需求。 然后,类、结构或枚举可以采用该协议 提供这些要求的实际实施。任何类型 满足协议要求的称为符合 该议定书 此函数capture

我和代表之间有一些问题。我在谷歌上搜索过,没有找到对我有帮助的答案。所以我写了
AVCapturePhotoCaptureDelegate
,因为有人告诉我。我应该做什么?(如何处理代表)


AVCapturePhotoCaptureDelegate是一个协议。您可以在此处阅读有关协议的更多信息,但相关信息如下:

协议定义了方法、属性和其他属性的蓝图 适合特定任务或功能的需求。 然后,类、结构或枚举可以采用该协议 提供这些要求的实际实施。任何类型 满足协议要求的称为符合 该议定书

此函数capturePhoto要求您传递符合协议的对象。按照惯例,我们称之为委托(将其视为委托给另一个对象的一系列功能)

这本质上是一个回电。capturePhoto“知道”(因为您遵守协议)代理将包含它需要调用的函数,以便您可以处理图像

要成功传递委托,需要定义一个符合协议的对象,并将该对象的实例作为委托传递给函数。必须声明要从协议中使用的方法。这里有一个部分示例-不要复制粘贴此内容,您需要为您的实现确定所需的内容

class PhotoDelegate() : AVCapturePhotoCaptureDelegate {
    optional func capture(_ captureOutput: AVCapturePhotoOutput, 
    didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, 
    previewPhotoSampleBuffer: CMSampleBuffer?, 
    resolvedSettings: AVCaptureResolvedPhotoSettings, 
    bracketSettings: AVCaptureBracketedStillImageSettings?, 
    error: Error?) {
        // YOUR CODE TO PROCESS THE IMAGE GOES HERE
    }
}

let myPhotoDelegate = PhotoDelegate()
// myPhotoDelegate is what you'll pass to the delegate: parameter
我会非常仔细地注意到,根据AVCapturePhotoCaptureDelegate的文档,这些方法在编译时都是可选的,需要实现哪些实际方法将取决于您传递的设置

照片输出调用的委托方法取决于照片 启动捕获时使用的设置。此协议中的所有方法都是 在编译时是可选的,但在运行时委托对象必须 根据您的照片设置响应某些方法:


您希望通过stillImageOutput实现什么?您正在使用捕获会话吗?由于我无法在AVCaptureStillImageOutput()中找到此函数是的,我正在使用capture会话。我无法找到(Apple已删除它并已删除stillImageOutput)AVCaptureStillImageOutput(),这就是为什么我使用AVCapturePhotoOutput()和capturePhoto(带:,委托:)它可用于最新的iOS版本,在将来的版本中,它将被弃用。因此,您无法使用AVCapturePhotoOutput()从捕获会话获取图像,对吗?我正在尝试捕获照片
委托:AVCapturePhotoCaptureDelegate
为什么用大写字母编写?!我的意思是这是一个类而不是一个实例。委托应该始终是(类的)实例,而不是类
class PhotoDelegate() : AVCapturePhotoCaptureDelegate {
    optional func capture(_ captureOutput: AVCapturePhotoOutput, 
    didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, 
    previewPhotoSampleBuffer: CMSampleBuffer?, 
    resolvedSettings: AVCaptureResolvedPhotoSettings, 
    bracketSettings: AVCaptureBracketedStillImageSettings?, 
    error: Error?) {
        // YOUR CODE TO PROCESS THE IMAGE GOES HERE
    }
}

let myPhotoDelegate = PhotoDelegate()
// myPhotoDelegate is what you'll pass to the delegate: parameter