gpt4 book ai didi

ios - Swift - webservice 的多个参数

转载 作者:行者123 更新时间:2023-11-28 16:05:38 25 4
gpt4 key购买 nike

我有以下代码应该将用户名和密码发送到网络服务,作为返回我得到一个整数:

 func attemptLogin() {

let url:URL = URL(string: endpoint+"/LoginNew")!
let session = URLSession.shared

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData

let postString = "username="+txtUsername.text! + "; password="+txtPassword.text!
request.httpBody = postString.data(using: String.Encoding.utf8)

let task = session.dataTask(with: request as URLRequest) {
(
data, response, error) in

guard let data = data, let _:URLResponse = response, error == nil else {
print("error")
return
}

let dataString = String(data: data, encoding: String.Encoding.utf8)
print(dataString)

}

task.resume()

}

在我的函数中,我需要添加两个参数,我正在尝试在这一行中做:

 let postString = "username="+txtUsername.text! + "; password="+txtPassword.text!
request.httpBody = postString.data(using: String.Encoding.utf8)

然而,当我运行它时,我从我的 Web 服务收到以下响应

Optional("Missing parameter: password.\r\n")

我显然没有正确地将参数附加到请求中,但我不确定我做错了什么。

最佳答案

最好避免使用显式解包选项(使用 !),而是对 UITextField 文本使用 guard let

为什么不分离成两种方法,attemptLoginlogin,这可能需要闭包才能在登录完成时执行代码?也许闭包可以采用 Result 枚举。

像这样:

typealias Done = (Result) -> Void

enum MyError: Error {
case unknown
}

enum Result {
case success(String)
case failure(MyError)

init(_ error: MyError) {
self = .failure(error)
}

init(_ dataString: String) {
self = .success(dataString)
}
}

func login(username: String, password: String, done: Done? = nil) {
let session = URLSession.shared
guard
let url = URL(string: endpoint+"/LoginNew"),
else { return }

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let postString = "username=\(username)&password=\(password)"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request) {
(data, response, error) in
guard let data = data else { done?(Result(.unknown)); return }
let dataString = String(data: data, encoding: String.Encoding.utf8)
done?(Result(dataString))
}

task.resume()
}

func attemptLogin() {
guard
let username = txtUsername.text,
let password = txtPassword.text
else { return }

login(username: username, password: password) {
result in
swicth result {
case .success(let dataString):
print(dataString)
case .failure(let error):
print("Failed with error: \(error)")
}
}
}

免责声明:尚未测试上面的代码,但希望它可以编译(至少有非常小的更改)。

关于ios - Swift - webservice 的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40343395/

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