Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 有没有办法从firebase登录到错误处理抛出错误?_Swift_Firebase_Error Handling_Firebase Authentication - Fatal编程技术网

Swift 有没有办法从firebase登录到错误处理抛出错误?

Swift 有没有办法从firebase登录到错误处理抛出错误?,swift,firebase,error-handling,firebase-authentication,Swift,Firebase,Error Handling,Firebase Authentication,我有一个类,我调用RealTimeAPI,然后是实际的LoginView控制器类,我想做的是在RealTimeAPI类中添加我的register方法,并在LoginView中调用register。但是接下来我需要在我的LoginView中处理errorhandle,所以我需要从registerfunction RealtimeAPI Createuser中的completionhandler抛出错误。这可能吗?这是到目前为止我的代码 实时类 import Foundation import Fi

我有一个类,我调用RealTimeAPI,然后是实际的LoginView控制器类,我想做的是在RealTimeAPI类中添加我的register方法,并在LoginView中调用register。但是接下来我需要在我的LoginView中处理errorhandle,所以我需要从registerfunction RealtimeAPI Createuser中的completionhandler抛出错误。这可能吗?这是到目前为止我的代码

实时类

import Foundation
import Firebase

enum RegisterError: Error
{
    case IncompleteForm
    case NonMatchingForm
    case FirebaseError
}



class RealTimeApi
{
    private let Reference: DatabaseReference! = Database.database().reference()
    private var nilOrNot = [Bool]()
    public var errorDescription: String?
    
    func Register(FullName: String?, Username: String?, Email: String?, EmailVerification: String?, Password: String?, PasswordVerification: String? )
    {

        Auth.auth().createUser(withEmail: Email!, password: Password, completion: er, Error){

        }

    }
    
    func Login(Username:String, Password: String)
    {

    }
    func CheckLoggedinUser() -> Bool
    {
   
        let currentuser = Auth.auth().currentUser
        
        if(currentuser == nil)
        {
           return false

        }else{
            return true
        }
    }
}
登录视图

import UIKit
import Firebase

class LogInV: UIViewController {

    @IBOutlet weak var UsernameTxt: UITextField!
    @IBOutlet weak var PasswordTxt: UITextField!
    @IBOutlet var TextfieldRegistrationCollection: [UITextField]!
    @IBOutlet weak var ImageView: UIView!
    @IBOutlet weak var RegisterView: UIView!
    @IBOutlet weak var RV_VerticalAlignmentConstraint: NSLayoutConstraint!
    @IBOutlet weak var RegisterBtnO: UIButton!
 
    var Data = RealTimeApi()
    
    var TextFieldStyle = TextfieldStyling()

    override func viewDidLoad() {
        super.viewDidLoad()
        TextFieldStyle.StylizeTextField(StylizedTextField: UsernameTxt)
        TextFieldStyle.StylizeTextField(StylizedTextField: PasswordTxt)
        for i in 0...TextfieldRegistrationCollection.count - 1 {
            TextFieldStyle.StylizeTextField(StylizedTextField: TextfieldRegistrationCollection[i])  
        }
        
        TextfieldValidation()
        RV_VerticalAlignmentConstraint.constant += view.bounds.height         
    }
    override func viewDidAppear(_ animated: Bool) {
        RegisterBtnO.isEnabled = false
    }

    @IBAction func LoginButtons(_ sender: UIButton) {
        switch  sender.tag{
        case 0:
            break
        case 1:
            Slide()
            break
        default:
            print("button not pressed")
            break
        }
        
    }
    func Slide()
    {
        UIView.animate(withDuration: 1, delay: 0, options: .curveEaseIn, animations: {
            self.RV_VerticalAlignmentConstraint.constant -= self.view.bounds.height
            self.view.layoutIfNeeded()
            
            
            
        }, completion: nil)

    }
    @IBAction func RegisterBtn(_ sender: UIButton) {
        
    }

//Validate textfields so that user register does not work for empty input
    func TextfieldValidation()
    {
        for i in 0...TextfieldRegistrationCollection.count - 1
        {
            TextfieldRegistrationCollection[i].addTarget(self, action: #selector(LogInV.textFieldDidChange), for: UIControlEvents.editingChanged)

        }  
    }
    //selector function for controlling empty textfield
    @objc func textFieldDidChange(){
         var NoneIsEmpty = Int()
        
        for i in 0...TextfieldRegistrationCollection.count - 1{
            if let text = TextfieldRegistrationCollection[i].text, text.isEmpty == false {
                
                NoneIsEmpty += 1
                
                
            }
        }
        if(NoneIsEmpty == TextfieldRegistrationCollection.count)
        {
            RegisterBtnO.isEnabled = true
            
            
        }else{
            RegisterBtnO.isEnabled = false
        }
        NoneIsEmpty = 0
    }

    func showAlert(error: String)
    {
        let Erroralert = UIAlertController(title: "Error", message: error, preferredStyle: .alert)
        
        Erroralert.addAction(UIAlertAction(title: "Dissmiss",style: .cancel ,handler: {action in
            print("tapped actionbutton")
        }))
        
        present(Erroralert, animated: true)
        
        
    }

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

        }
        func UploadCustomerList(customer: Customer)
        {                
        }
        
    }
所以基本上我想做这样的事情

Auth.auth().createUser(withEmail: Email!, password: Password, completion: User, Error){
    
    throw Error

}

我使用以下方法创建了一个帮助器类:

func setupAlert(with title: String, with message: String?, viewController: UIViewController) {
            let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
            let cancel = UIAlertAction(title: "OK", style: .cancel, handler: nil)
            alert.addAction(cancel)
            viewController.present(alert, animated: true, completion: nil)
            
        }
必须在要显示警报的参数中传递viewcontroller。然后还可以传递错误,可以在Auth.Auth()中找到