有没有一种方法可以将错误从firebase登录转移到错误处理



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

RealtimeAPIClass

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
}
}
}

Loginview

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((中找到

相关内容

最新更新