Swift 如何将POST值发送到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

我是Swift的初学者。我一直在寻找解决办法,但还没有找到。我很抱歉。 我已经从服务器上收到了API,作为在Xcode项目期间实现登录的POST

我认为连接很好,但是代码(LoginViewController.swift)似乎没有进入服务器。我该怎么办?我会附上代码

API连接文件

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'不一致]出现错误。