gpt4 book ai didi

swift - 在 Xcode 中使用整洁的 swift 架构的注册页面出现问题

转载 作者:行者123 更新时间:2023-11-30 10:51:08 26 4
gpt4 key购买 nike

我目前正在我正在开发的聊天应用程序中实现注册功能。在我的“SignupViewController”中,我想实现一个名为“signupButtonPressed”的函数,它将我从注册 View Controller 路由到“ListContacts” View Controller 。如果注册失败,则会执行名为“showValidationError”的函数。下面是我的 SignupViewController 的代码摘录:

@IBAction func signupButtonPressed(_ sender: Any) {
let request = Signup.Request(
name: fullNameTextField.text!,
email: emailTextField.text!,
password: passwordTextField.text!
)

interactor?.createAccount(request: request)
}

func showValidationError(_ message: String) {
let alertCtrl = UIAlertController(title: "Oops! An error occurred", message: message, preferredStyle: .alert)
alertCtrl.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
self.show(alertCtrl, sender: self)
}

我正在使用 Swift Clean 架构,因此我还将代码链接到我的注册路由器、模型和交互器文件:

1)Signupinteractor.swift:

import Foundation

protocol SignupBusinessLogic {
func createAccount(request: Signup.Request)
}

class SignupInteractor: SignupBusinessLogic {
var viewController: SignupFormErrorLogic?
var router: (NSObjectProtocol & SignupRoutingLogic)?
var worker = UsersWorker()

func createAccount(request: Signup.Request) -> Void {
self.worker.signup(request: request) { user, error in

guard error == nil else {

print(error!)
self.viewController?.showValidationError("Error creating account!")
return
}

self.router?.routeToListContacts()
}
}
}

2)SignupModels.swift:

import Foundation

enum Signup {
struct Request {
var name: String
var email: String
var password: String
}

struct Response {
var user: User?

init(data: [String:Any]) {
self.user = User(
id: data["id"] as! Int,
name: data["name"] as! String,
email: data["email"] as! String,
chatkit_id: data["chatkit_id"] as! String
)
}
}
}

3)SignupRouter.swift:

import UIKit

@objc protocol SignupRoutingLogic {
func routeToListContacts()
}

class SignupRouter: NSObject, SignupRoutingLogic {
weak var viewController: SignupViewController?

func routeToListContacts() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destinationVC = storyboard.instantiateViewController(withIdentifier: "MainNavigator") as! UINavigationController

viewController!.show(destinationVC, sender: nil)
}
}

我的 UsersWorker.swift 文件中的注册函数:

func signup(request: Signup.Request, completionHandler: @escaping (User?, UsersStoreError?) -> Void) {
let params: Parameters = [
"name": request.name,
"email": request.email,
"password": request.password
]

postRequest("/api/users/signup", params: params, headers: nil) { data in
guard data != nil else {
return completionHandler(nil, UsersStoreError.CannotSignup)
}

let response = Signup.Response(data: data!)
CurrentUserIDDataStore().setID(CurrentUserID(id: response.user?.chatkit_id))

let request = Login.Account.Request(
email: request.email,
password: request.password
)

self.login(request: request) { token, error in
guard error == nil else {
return completionHandler(nil, UsersStoreError.CannotLogin)
}

DispatchQueue.main.async {
completionHandler(response.user, nil)
}
}
}
}

当我在注册 UITextfields(fullNameTextField;emailTextField;passwordTextField)中输入注册详细信息并按下注册按钮时,会触发名为“CannotSignup”的错误。但不确定为什么。这个案例也可以在我的 UsersWorker.swift 文件中找到:

enum UsersStoreError: Error {
case CannotLogin
case CannotSignup
case CannotFetchChatkitToken
}

如果有人能够查看代码以了解问题可能是什么以及我如何解决它,那就太好了?如果需要任何进一步的信息,请询问!

最佳答案

很可能是 API 调用失败,请检查返回的 HTTP 状态代码而不是数据。在某些情况下,API 调用可以在没有任何响应数据的情况下成功理想情况下,发送 Error 实例以及从 postRequest 方法返回的数据

关于swift - 在 Xcode 中使用整洁的 swift 架构的注册页面出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54511861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com