Swift 如何将POST值发送到API?[快速]
我是Swift的初学者。我一直在寻找解决办法,但还没有找到。我很抱歉。 我已经从服务器上收到了API,作为在Xcode项目期间实现登录的POST 我认为连接很好,但是代码(LoginViewController.swift)似乎没有进入服务器。我该怎么办?我会附上代码 API连接文件Swift 如何将POST值发送到API?[快速],swift,xcode,post,restapi,Swift,Xcode,Post,Restapi,我是Swift的初学者。我一直在寻找解决办法,但还没有找到。我很抱歉。 我已经从服务器上收到了API,作为在Xcode项目期间实现登录的POST 我认为连接很好,但是代码(LoginViewController.swift)似乎没有进入服务器。我该怎么办?我会附上代码 API连接文件 class NetworkHandler { static let MAIN_URL = "http://localhost:8080" class func
class NetworkHandler {
static let MAIN_URL = "http://localhost:8080"
class func initialize () {
let config = URLSessionConfiguration.default
config.httpAdditionalHeaders = ["User-Agent": "smc"]
let defaultSession = URLSession(configuration: config)
let request = URLRequest(url: URL(string: MAIN_URL)!)
let dataTask = defaultSession.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
guard error == nil else {
print("Error occur: \(String(describing: error))")
return
}
guard let _ = data, let response = response as? HTTPURLResponse, response.statusCode == 200 else {
return
}
}
dataTask.resume()
}
class func LoginBoard(_ completeHandler: @escaping (login) -> Void) {
let loginboard: String = MAIN_URL + "/member/login"
guard let url = URL(string: loginboard) else {
print("Error: cannot create URL")
return
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
let session = URLSession.shared
let task = session.dataTask(with: urlRequest) { (data, response, error) in
guard error == nil else {
print("error calling Post on /todos/1")
print(error!)
return
}
guard let responseData = data else {
print("Error: did not receive data")
return
}
do {
let decoder = JSONDecoder.init()
let LoginList = try decoder.decode(login.self, from: responseData)
completeHandler(LoginList)
}
catch {
print("error trying to convert data to JSON")
return
}
}
task.resume()
}
LoginViewController.swift
class LoginViewController: UIViewController {
var LoginList: login?
@IBOutlet var inputId: UITextField!
@IBOutlet var inputPass: UITextField!
@IBOutlet var alertId: UILabel!
@IBOutlet var alertPass: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
alertId.isHidden = true
alertPass.isHidden = true
NetworkHandler.LoginBoard() { LoginList in
self.LoginList = LoginList
}
}
func loginlogic() {
if let LoginList = self.LoginList {
self.inputId.text = LoginList.userId
self.inputPass.text = LoginList.userPw
}
}
@IBAction func btnLogin(_ sender: UIButton) {
if inputId.text == "" {
alertId.isHidden = false
} else if inputId.text != "" {
alertId.isHidden = true
}
if inputPass.text == "" {
alertPass.isHidden = false
} else if inputPass.text != "" {
alertPass.isHidden = true
}
loginlogic()
}
}
登录json
struct login: Codable {
var userId: String?
var userPw: String?
}
到目前为止,我只使用GET方法,但这是我第一次使用POST方法。如果要将body设置为POST请求,可以使用
urlRequest.httpBody = try! JSONEncoder().encode(loginObject)
API连接文件>urlRequest.httpMethod=“POST”下一行urlRequest.httpBody=try!JSONEncoder().encode(登录)是这样写的吗?(LoginObject=Login)@je2是。你测试过了吗?是的,我测试过了。但是[参数类型'login.type'与预期类型'Encodable'不一致]出现错误。