2016-06-12 9 views
0

Я имел в виду написать вложенную функцию, которая принимает строку причины для touchID и значение bool, если оно должно быть показано или нет. Это мой кодРеализация базового сенсорного ID

import UIKit 
import LocalAuthentication 

class XYZ : UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     presentTouchID(reasonToDsiplay: "Are you the owner?", true) //ERROR: Expression resolves to an unused function 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func presentTouchID(reasonToDsiplay reason: String, _ shouldShow: Bool) -> (Bool) ->(){ 

     let reason1 = reason 
     let show = shouldShow 

     let long1 = { (shoudlShow: Bool) ->() in 

      if show{ 
       let car = LAContext() 

       let reason = reason1 

       guard car.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil) else {return} 

       car.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reason) {(success, error) in 

        guard error != nil else {return} 

        dispatch_async(dispatch_get_main_queue(), { Void in 

         print("Kwaatle") 

        }) 

       } 

      } 
      else{ 
       print("Mah") 
      } 


     } 
     return long1 
    } 
} 

Когда я presentTouchID(reasonToDsiplay: "Are you the owner?", true) в func viewDidLoad() я получаю сообщение об ошибке говорящего

Expression решает неиспользуемые функции.

Что я делаю неправильно?

ответ

1

Проблема в том, что ваш метод presentTouchID возвращает замыкание/функцию. Вы вызываете presentTouchID, но не используете возвращенное закрытие каким-либо образом.

У вас здесь есть несколько вариантов.
1. Вызов возвращаемый окончания:

presentTouchID(reasonToDsiplay: "Are you the owner?", true)(true) 

который выглядит действительно очень неудобно.
2. Вы можете сохранить возвращенную замыкание в переменной:

let present = presentTouchID(reasonToDsiplay: "Are you the owner?", true) 

Я не уверен, хотя, если это имеет смысл здесь.
3. Вы можете удалить логическое значение в качестве аргумента из presentTouchID
4. ИЛИ исправить возвращаемого закрытие

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    presentTouchID(reasonToDsiplay: "Are you the owner?", true) { success in 
     if success { 
      print("Kwaatle") 
     } else { 
      print("Mah") 
     } 
    } 
} 

func presentTouchID(reasonToDsiplay reason: String, _ shouldShow: Bool, completion: (evaluationSuccessfull: Bool) ->()) { 

    if shouldShow { 
     let car = LAContext() 

     guard car.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil) else { 
      completion(evaluationSuccessfull: false) 
      return 
     } 

     car.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reason) {(success, error) in 

      guard error != nil else { 
       completion(evaluationSuccessfull: false) 
       return 
      } 
      completion(evaluationSuccessfull: success) 
     } 

    } else{ 
     completion(evaluationSuccessfull: false) 
    } 
} 
+0

И @ luk2302, это также можно рассматривать в качестве обработчика завершения правильно? – Dershowitz123

+0

@ Dershowitz123 Да, это очень хороший обработчик завершения. – luk2302

+0

Отлично. Это также синхронный процесс? Поскольку я читал, что синхронные процессы замерзают пользовательский интерфейс? Я ошибаюсь? @ Luk2302? – Dershowitz123

 Смежные вопросы

  • Нет связанных вопросов^_^