swift3.0指纹解锁的实现方法

 更新时间:2017年03月28日 08:19:18   作者:zxw_1141189194  
这篇文章主要为大家详细介绍了swift3.0指纹解锁的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近学习swift3.0, 不忙的时候开始用 Swift 重写现有的项目,有些地方的写法变得让人不知道怎么写了,今天就分享一下我在重写 指纹解锁工具类的时候遇到的一些问题吧。

先展示一下成果

class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    TouchIdManager.touchIdWithHand(fallBackTitle: "", succeed: { 
      print("解锁成功")
    }) { (error) in
      print(error.localizedDescription) 
    }

    print(TouchIdManager.IsSupportTouchID)

  }
}

import LocalAuthentication
class TouchIdManager {

  /// 指纹解锁
  ///
  /// - Parameters:
  ///  - fallBackTitle: Allows fallback button title customization. A default title "Enter Password" is used when
  ///       this property is left nil. If set to empty string, the button will be hidden
  ///  - succeed: 解锁成功的回调
  ///  - failed: 解锁失败的回调
  class func touchIdWithHand(fallBackTitle: String?, succeed: @escaping () -> (), failed: @escaping (_ error: LAError) -> ()) {

    guard self.IsSupportTouchID else {
      print("设备不支持TouchID 或未开启TouchID ")
      return
    }

    let context = LAContext()
    context.localizedFallbackTitle = fallBackTitle
    let reason = "验证指纹,完成支付"
    context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: { (isSuccess, err) in

      OperationQueue.main.addOperation({

        guard isSuccess == true, err == nil else {
          let laerror = err as! LAError
          failed(laerror)
//          switch laerror.code {
//          case LAError.authenticationFailed: 
//            print("连续三次输入错误,身份验证失败。")
//          case LAError.userCancel: 
//            print("用户点击取消按钮。")
//          case LAError.userFallback: 
//            print("用户点击输入密码。")
//          case LAError.systemCancel: 
//            print("系统取消")
//          case LAError.passcodeNotSet: 
//            print("用户未设置密码")
//          case LAError.touchIDNotAvailable: 
//            print("touchID不可用")
//          case LAError.touchIDNotEnrolled: 
//            print("touchID未设置指纹")
//          default: break
//          }

          return
        }
        succeed()
      })
    })
  }

  /// 检查手机 TouchID 功能是否开启或可以使用
  class var IsSupportTouchID: Bool {
    get {
      let context = LAContext()
      var error :NSError?
      let isSupport = context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)
      return isSupport
    }
  }  
}

在实现的时候主要遇到的问题是, 对 evaluatePolicy 方法中回调的 Error 值的处理;
方法定义:
func evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Swift.Void)

由于swift对参数类型严格校验,而 Error 是一个协议,它并没有 Error.code 的值来跟各种错误类型来对应;
swift 2 中,我在这一块是这么写的

switch LAError(rawValue: error!.code) {

          case .Some(LAError.AuthenticationFailed):
            print("连续三次输入错误,身份验证失败。")
          case .Some(LAError.UserCancel):
            print("用户点击取消按钮。")
          case .Some(LAError.UserFallback):
            print("用户点击输入密码。")
          case .Some(LAError.SystemCancel):
            print("系统取消")
          case .Some(LAError.PasscodeNotSet):
            print("用户未设置密码")
          case .Some(LAError.TouchIDNotAvailable):
            print("touchID不可用")
          case .Some(LAError.TouchIDNotEnrolled):
            print("touchID未设置指纹")
          default:
            break
          }

swift3 中取消了这种语法, 但是处理起来更简单了,可以将 Error 直接强转成 LAError 就行了

let laerror = err as! LAError

但是,有个疑问,我要怎么才能最快的知道 需要强转成什么类型呢? 有知道的 谢谢告知!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Swift中重写和重载的使用与对比总结

    Swift中重写和重载的使用与对比总结

    这篇文章主要给大家介绍了关于Swift中重写和重载的使用方法,以及重写和重载的对比分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • swift4.2实现新闻首页导航

    swift4.2实现新闻首页导航

    这篇文章主要为大家详细介绍了swift4.2实现新闻首页导航,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • swift中获取字符串前缀的七种方法总结

    swift中获取字符串前缀的七种方法总结

    在日常的开发中,经常会需要获取一个字符串的前缀,在这篇文章中我总结了在 Swift 中检查字符串前缀的多种方法分享给大家,看看有没有你不知道的
    2023-12-12
  • 如何使用Swift来实现一个命令行工具的方法

    如何使用Swift来实现一个命令行工具的方法

    这篇文章主要介绍了如何使用Swift来实现一个命令行工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • RxSwift学习之Observable的新建、订阅及取消订阅

    RxSwift学习之Observable的新建、订阅及取消订阅

    这篇文章主要给大家介绍了关于RxSwift学习教程之Observable的相关资料,文中详细的给大家介绍了关于新建Observable、订阅Observable和取消订阅并消除内存泄漏等相关的内容,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • swift 3.0 实现短信验证码倒计时功能

    swift 3.0 实现短信验证码倒计时功能

    这篇文章主要介绍了swift 3.0 实现短信验证码倒计时功能的相关资料,需要的朋友可以参考下
    2017-02-02
  • switch多选择结构、循环结构示例详解

    switch多选择结构、循环结构示例详解

    这篇文章主要介绍了switch多选择结构、循环结构,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • swift内存管理指针类型使用实例详解

    swift内存管理指针类型使用实例详解

    这篇文章主要为大家介绍了swift内存管理指针类型使用实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Swift 3.0基础学习之下标

    Swift 3.0基础学习之下标

    这篇文章主要介绍了Swift 3.0基础学习之下标的相关资料,文中介绍的非常详细,对大家学习或者使用swift具有一定的参考价值,需要的朋友下面来一起看看吧。
    2017-03-03
  • Swift实现可自定义分页宽度的UIScrollView

    Swift实现可自定义分页宽度的UIScrollView

    这篇文章主要为大家详细介绍了Swift实现可自定义分页宽度的UIScrollView,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论