Ios 帮助器中的Swift 3可重用post方法

Ios 帮助器中的Swift 3可重用post方法,ios,iphone,swift,macos,rest,Ios,Iphone,Swift,Macos,Rest,我正在开发swift 3应用程序,希望使用RESTAPI构建登录系统。首先,我想用参数将数据发布到服务器(PHP+MYSQL),所以我找到了这篇文章 现在我想把这个代码作为助手放在一个方法中,这样我就可以在应用程序的任何地方使用这个方法。因此, 目前的代码如下: import Foundation class Helper { static func postData(resource: String, params: [String: String]) -> [String:S

我正在开发swift 3应用程序,希望使用RESTAPI构建登录系统。首先,我想用参数将数据发布到服务器(PHP+MYSQL),所以我找到了这篇文章

现在我想把这个代码作为助手放在一个方法中,这样我就可以在应用程序的任何地方使用这个方法。因此,

目前的代码如下:

import Foundation

class Helper {


static func postData(resource: String, params: [String: String]) -> [String:String] {

    var request = URLRequest(url: URL(string: "http://localsite.dev/api/\(resource)")!)
    request.httpMethod = "POST"

    var qryString: String = "?key=abcd"
    for (paramKey, paramVal) in params {
        qryString = qryString.appending("&\(paramKey)=\(paramVal)")
    }

    request.httpBody = qryString.data(using: .utf8)

    let task = URLSession.shared.dataTask(with: request) { data, response, error in

        guard let data = data, error == nil else {
            print("Error")
            return
        }

        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
            print("Error on HTTP")
            return
        }

        let responseString = String(data: data, encoding: .utf8)
        print("success and here is returned data \(responseString)")
    }

    task.resume()

    return ["data" : "some data"]

}
}
称之为使用

let loginDetails: [String: String] = ["email": emailTxt.text!, "pass": passTxt.text!]
Helper.postData(resource: "login", params: loginDetails)
在上面的方法,而不是打印数据,我想返回数据按照以下4个条件

1.如果请求数据中有错误,则我希望返回为

[“status”: false, “message”: “Something wrong with request”]
2.HTTP请求中的If错误

[“status”: false, “message”: “Resource not found”]
3.如果登录失败

[“status”: false, “message”: “Wrong login details”]
4.如果登录成功

[“status”: true, “message”: “Login success”]

如果您想使用第三方库来处理HTTP请求,我强烈建议您

当我想要处理HTTP请求时,我通常创建一个单例类:

class HttpRequestHelper {
   static let shared = HttpRequestHelper()

   func post(to url: URL, params: [String: String], headers: [String: String], completion: (Bool, String) -> ()){
         //Make the http request
         //if u got a successful response 
         // parse it to JSON and return it via completion handle
         completion(true, message)
         //if response is not successful
         completion(false, message)

   }

}
您可以在任何地方使用它:

class AnotherClass: UIViewController {
    HttpRequestHelper.shared.post(to: url, params: [:], header: [:], 
    completion:{
        success, message in 
          print(success)
          print(message)
    })
}
为了使POST方法更加可重用,而不仅仅是特定于端点,我通常将完成处理程序参数设置为Bool、JSON。然后我从调用该方法的任何地方处理JSON响应


哦,我使用快速json解析json,这是最简单的

您将需要向函数传递一个完成处理程序闭包,并让任务的完成处理程序调用该处理程序,以将值再次返回给callerHi@Paulw11。。你能给我举个例子吗?抱歉,iphone开发和swift有点陌生。你能给我举个例子说明我的代码吗。。当我用完成(true,message)替换打印消息时,我得到错误。