【问题标题】:How to fix this try/guard error in swift如何在 swift 中修复此 try/guard 错误
【发布时间】:2015-10-25 07:50:16
【问题描述】:

尝试学习 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()
        }
    }
}

我敢肯定这很简单,但是有人可以准确地概述一下语法的外观。认为我应该理想地使用快速“守卫”指令而不是尝试。

【问题讨论】:

  • 你需要类似于我发布的here
  • “我认为我应该在理想情况下使用 swift "guard" 指令而不是尝试。” – 不。您是否查找过该方法的文档? "在 Swift 中,此方法返回 Void 并用 throws 关键字标记,表示在失败的情况下它会抛出错误。您在 try 表达式中调用此方法并处理 do 语句的 catch 子句中的任何错误,如...中所述 + 相关错误处理文档的链接。

标签: ios swift


【解决方案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()

你甚至可以用它来代替if

guard let device = captureDevice else {
    print("Device is nil!")
    return
}

// Do things with device

【讨论】:

  • 这是如何工作的? lockForConfiguration() 抛出错误,一个简单的守卫如何处理抛出行为。
  • 第一个代码块错误,甚至无法编译。 lockConfiguration() 而不是 lockForConfiguration() 只是一个错字,但该方法会引发错误并且必须在 try 表达式中调用。
  • 是的,我一直关注guard,因为 OP 想知道应该使用什么语法。编辑处理方法中的错误。
  • 到底是什么问题?我没有关于 lockForConfiguration() 方法的任何信息。如果它返回Bool,这应该可以正常工作。
  • 问题是你试图回答一个没有意识到他们的问题不正确的人提出的问题。查找 XY 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2021-10-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多