【问题标题】:TouchID with Xcode 7, Swift 2带有 Xcode 7、Swift 2 的 TouchID
【发布时间】:2015-10-16 23:43:10
【问题描述】:

我不知道如何使用 Swift 2 将 TouchID 与 Xcode 7 结合使用。这是我遇到问题的代码部分:

override func viewDidLoad() {
    super.viewDidLoad()

    let auth = LAContext()
    var authError: NSError?

    auth.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError)

    }

这应该适用于 iOS 8,但不适用于 iOS 9 开发的 Xcode 7 Beta。它给出了这个编译器错误:“Extra Argument 'error' in call”,并且“&authError”被突出显示。当我删除额外的参数时,我得到编译器错误:“调用可以抛出,但它没有用'try'标记并且错误没有被处理。”

【问题讨论】:

    标签: ios cocoa-touch ios9 touch-id


    【解决方案1】:

    在 Swift 2 中,Apple 引入了新的错误处理机制。
    如果你看一下方法声明,你会看到:

    func canEvaluatePolicy(policy: LAPolicy) throws  
    

    它没有error 参数,但它有一个特殊的词throws 告诉您可能引发的潜在错误。

    要处理此类错误,请使用do/try/catch 表达式:

    do {
        try auth.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)
    } catch {
        // Handle error
    }
    

    【讨论】:

      【解决方案2】:
      do {
          try auth.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics) 
      } catch {
          print("Error: \(error)")
      }
      

      只要确保处理错误。

      【讨论】:

      • 像这样?: ' override func viewDidLoad() { super.viewDidLoad() let auth = LAContext() var authError: NSError? do { auth.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics) } catch { print("Error: (error)") } }' 因为我得到一个编译器错误:“调用可以抛出,但没有标有“尝试””
      • 行前需要加上try。
      • @RedEagle2000 你不需要 var authError: NSError?没有了,所以删除它,否则你的罚款。
      • @Fogmeister 谢谢,我加了。编译也会表明这一点。
      • 在添加尝试并删除 authError 变量后,我没有再收到任何编译器错误,谢谢。顺便说一句,我将如何在“if”语句中引用它?例如,如果用户有一个带有 TouchID 的 iOS 设备,那么执行此操作,否则执行其他操作,例如显示密码输入视图?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 2015-12-28
      • 2016-11-11
      • 2015-10-17
      • 2016-08-17
      相关资源
      最近更新 更多