swift - 有没有办法将错误从 firebase 登录到错误处理?
问题描述
我有一个类,我调用 RealTimeAPI,然后是实际的 LoginViewController 类,我想做的是我想在我的 RealtimeApi 类中添加我的注册方法并在我的 LoginView 中调用注册。但是我需要在我的 LoginView 中进行错误处理,所以我需要从 registerfunction RealtimeAPIs Createuser 中的完成处理程序中抛出错误。这可能吗?到目前为止,这是我的代码。
实时API类
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)
}
您必须在要显示警报的参数中传递视图控制器。然后也可以传错误,可以在Auth.auth()中找到
推荐阅读
- android-studio - 如何在 android studio 4.1.3 中减少或清除 gradle-heap
- angular - ionic4 形式的密码和确认密码匹配验证
- html - 如何减少wordpress中的页脚大小
- python - pygame.QUIT 未定义
- json - 如何构造单个 JSON,其中 column1 是属性名称,column2 是值
- java - 如何通过 MainFrame 中的事件侦听器将 JPanel 作为组件添加到另一个类
- sql - 在具有多个总和的多个列上进行透视
- java - 将 EJB 2.1 从 Weblogic 迁移到 JBoss EAP 7.2
- ksqldb - ksql-server 指标名称在服务 ID 后缺少下划线
- java - Swagger 未从运行时检测参数