gpt4 book ai didi

ios - 我如何将我的网络代码与我的 ViewController 分开

转载 作者:搜寻专家 更新时间:2023-11-01 06:27:50 27 4
gpt4 key购买 nike

我现在正在使用 Alamofire 来发出发布请求。我首先在 ViewController 中构建它并开始工作。但后来我试图通过在另一个 class 中构建它来分离它。我使用 singleton 并且在调用 ViewController 时仍然有效。唯一的问题是状态恢复成功后,我试图在用户登录时实例化另一个 ViewController 。我不想在网络类中这样做,我想这样做它在我的 ViewController 中。我怎样才能做到这一点?

enum Status: Int {
case Success = 200
case Failure = 401
}

enum HTTPMethod: String {
case Post = "POST"
case Get = "GET"
}

enum APIKey: String {
case value = "somevalueeeeeeeee"
case key = "somekeyyyyyyyyyyyyyy"
}

import Foundation
import Alamofire
import UIKit

class NetworkManager {
static let shared = NetworkManager()

func makePostRequest(url: URL, params: Parameters, headers: HTTPHeaders, credential: URLCredential) {
Alamofire.request(url, method: .post, parameters: params, headers: headers).authenticate(usingCredential: credential)
.responseJSON { response in
print(response)
let status = response.response?.statusCode
switch status {
case Status.Success.rawValue:
print("I would like to instantiate my viewcontroller here")
case Status.Failure.rawValue:
print("Bad Request")
default:
break
}
}
}
}

import UIKit
import Alamofire

class LoginViewController: UIViewController {
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextfield: UITextField!

private func login() {
guard let userName = emailTextField.text else { return }
guard let passWord = passwordTextfield.text else { return }

let params: Parameters = [
"username": userName,
"password": passWord
]
guard let url = URL(string: URLS.url.rawValue) else { return }
let headers = [APIKey.key.rawValue: APIKey.value.rawValue]
let credential = URLCredential(user: userName, password: passWord, persistence: .forSession)

NetworkManager.shared.makePostRequest(url: url, params: params, headers: headers, credential: credential)
}

@IBAction func onLoginTapped(_ sender: UIButton) {
login()
}
}

最佳答案

将完成 block 添加到您的函数中:

func makePostRequest(url: URL, params: Parameters, headers: HTTPHeaders, credential: URLCredential, completion:@escaping(Bool)->()) {
Alamofire.request(url, method: .post, parameters: params, headers: headers).authenticate(usingCredential: credential)
.responseJSON { response in
print(response)
let status = response.response?.statusCode
switch status {
case Status.Success.rawValue:
print("I would like to instantiate my viewcontroller here")
completion(true)
break
case Status.Failure.rawValue:
print("Bad Request")
completion(false)
break
default:
break
}
}
}

然后从 ViewController 中这样调用它:

NetworkManager.shared.makePostRequest(url: URL, params: Parameters, headers: HTTPHeaders, credential: "") { (success) in
if success {

} else {

}
}

关于ios - 我如何将我的网络代码与我的 ViewController 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553904/

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