Ios 使用Swift 2处理错误

Ios 使用Swift 2处理错误,ios,swift2,Ios,Swift2,我对他的代码有一个错误处理问题: var err : NSError? = nil captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &err)) if err != nil { print("error: \(err?.localizedDescription)") } 我在captureSession行中不断遇到以下错误: 无法使用类型为“”的参数列表调用类型为“”的AV

我对他的代码有一个错误处理问题:

var err : NSError? = nil

captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &err))

if err != nil {
    print("error: \(err?.localizedDescription)")
}
我在captureSession行中不断遇到以下错误:

无法使用类型为“”的参数列表调用类型为“”的AVCaptureDeviceInput“”的初始值设定项(设备:AVCaptureDevice?,错误:inout NSError?)

我尝试使用以下方法解决此问题:

let err : NSError?

do {
    err = try captureSession.addInput(AVCaptureDeviceInput(device: captureDevice))
} catch _ {
    err = nil
}
但是,我在do catch语句的第一行遇到了另一个错误:

无法将“Void”(又名“()”)类型的值分配给“NSError”类型的值


知道哪里出了问题吗?谢谢

AVCaptureDeviceInput
有一个名为
init(device:)
的初始值设定项,如果无法初始化,它会抛出一个
外部错误

所以你可以做
试试!AVCaptureDeviceInput(device:someDevice)
这意味着您“承诺”它不会失败(如果失败就会崩溃)。或者你可以试试看

do {
    try AVCaptureDeviceInput(device: someDevice)
} catch let error as NSError {
    print(error)
}

AVCaptureDeviceInput
有一个名为
init(device:)
的初始值设定项,如果无法初始化,则
会抛出一个
外部错误

所以你可以做
试试!AVCaptureDeviceInput(device:someDevice)
这意味着您“承诺”它不会失败(如果失败就会崩溃)。或者你可以试试看

do {
    try AVCaptureDeviceInput(device: someDevice)
} catch let error as NSError {
    print(error)
}
//更新swift3 这就是我们在swift3上的处理方式

        var input = AVCaptureDeviceInput()
        do {
              input = try AVCaptureDeviceInput(device: device)
              self.captureSession.addInput(input) 
           }
        catch {
              //  error
           }
//更新swift3 这就是我们在swift3上的处理方式

        var input = AVCaptureDeviceInput()
        do {
              input = try AVCaptureDeviceInput(device: device)
              self.captureSession.addInput(input) 
           }
        catch {
              //  error
           }

如果你想得到更好的解决方案,你可以删除第一行。目的是展示如何处理swift3中AVCaptureDeviceInput引发的错误。如果您想要更优化的解决方案,可以删除第一行。目的是展示如何处理swift3中AVCaptureDeviceInput抛出的错误。