Swift: & Biometric: как получить результат аутентификации как логический

моя главная цель - быстро подключиться к моему родному проекту. Но давайте сосредоточимся на Swift. Я хочу получить результат локальной биометрической аутентификации.

Биометрический Мне удалось добиться появления биометрической аутентификации. Но я хочу получить результат как логический - Успех или Неудача. Однако моя функция не может вернуть правильный результат. Пожалуйста, посмотрите

// Biometric Authentication
    func biometricAuthentication() -> Bool {
        print("In authenticateUser()")
        let context = LAContext()
        let reason = "Biometric Authntication testing !!"
        //        var authError: NSError?
        var result : Bool = false
        
        if #available(iOS 8.0, macOS 10.12.1, *){
            print("in available")
            context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { (success, error) in
                
                
                
                DispatchQueue.main.async {
                    if success {
                        result = true
                        print("Success")
                    }else{
                        print("Failed")
                        return
                    }
                    //                    return result
                }
            }
            
            print("Result : \(result)")
            
            return result
            
        }else{
            print("This feature is not supported.")
            self.resultLabel.text = "Not Supported"
            return result
        }
    }

person Punreach Rany    schedule 15.04.2021    source источник
comment
@valosip Давайте сосредоточимся на общей картине. Эта небольшая ошибка может быть исправлена ​​позже. Знаете ли вы, как получить биометрический результат в виде логического значения?   -  person Punreach Rany    schedule 15.04.2021
comment
Биометрическая аутентификация происходит асинхронно, поскольку пользователю потребуется некоторое время, чтобы ответить на приглашение. Это означает, что вы не можете вернуть логическое значение. Вам нужно предоставить какое-то закрытие, которое будет вызвано, как только у вас будет ответ   -  person Paulw11    schedule 15.04.2021
comment
@Paulw11 Не могли бы вы показать мне, как это сделать? Я совсем новичок в ios dev.   -  person Punreach Rany    schedule 15.04.2021
comment
Найдите «[swift] return asynchronous» (stackoverflow.com/search?q=%5Bswift%5D+ return+asynchronous), и вы увидите множество примеров шаблона. Например. stackoverflow.com/a/25742551/1271826   -  person Rob    schedule 15.04.2021
comment
Или stackoverflow.com/a/28868958/1271826. Идея состоит в том, чтобы не пытаться return получить результат, а добавить замыкание @escaping, параметром которого является, например, Bool. Но не пытайтесь return использовать значение, переданное в обработчике завершения асинхронного метода.   -  person Rob    schedule 15.04.2021
comment
@Rob Итак, вы говорите, что я НЕ МОГУ вернуть какое-либо значение. Но я могу использовать функцию обратного вызова для выполнения таких действий, как изменение значения метки или представление нового экрана. Я прав?   -  person Punreach Rany    schedule 15.04.2021
comment
В яблочко. Используйте параметр закрытия, чтобы указать, что должно вызываться после завершения асинхронного процесса.   -  person Rob    schedule 15.04.2021