如何在swift中修复此try / guard错误

时间:2015-10-25 07:50:16

标签: ios swift

尝试学习swift 2.0。得到这个代码,但它失败,错误可以抛出和错误,没有标记尝试,并没有处理错误。在线device.lock ...

func focusTo(value : Float) {
    if let device = captureDevice {
        if(device.lockForConfiguration()) {
            device.setFocusModeLockedWithLensPosition(value, completionHandler: { (time) -> Void in
                //
            })
            device.unlockForConfiguration()
        }
    }
}

我相信这很简单,但有人可能会详细说明语法的外观。我认为我应该理所当然地使用快速的“守卫”指令而不是尝试。

1 个答案:

答案 0 :(得分:1)

修改guard只能确保device.lockForConfiguration()不返回false。如果它抛出错误,则它必须由do - try - catch包裹:

在这种情况下,lockForConfiguration()不会返回Bool,因此与guard无关。

do {
    try device.lockForConfiguration()

    device.setFocusModeLockedWithLensPosition(...)
    device.unlockForConfiguration()

} catch let error as NSError {
    if error.code == 0 {
        print("Error code: 0")
    }
}

语法为:

guard device.lockForConfiguration() else {
    print("Lock configuration failed!!1")
    return
}

device.setFocusModeLockedWithLensPosition()
device.unlockForConfiguration()

您甚至可以使用它来替换{​​{1}}:

if