如何通过Swift和Rest API之间的连接获取和发布JSON?

时间:2019-07-19 06:17:51

标签: json swift rest

我目前正在为一家公司编写内部应用程序,这是我学习的一部分。因此,我以前没有在Swift中进行编程,该公司为我提供了他们编写的外部REST服务器的额外资源,该服务器提供GET,POST,PUT和DELETE,并且需要服务器名称,dbname,dbscheme和表名。 REST服务器返回一个JSON对象。

我之前已经搜索过答案,但是它们主要用于本地Rest服务器,或者代码用于较早的Swift版本。如果您知道我该如何处理,请帮助我。

1 个答案:

答案 0 :(得分:0)

您应该看看这个Tutorial. 这是非常基础的,但是您将学习如何使用URLSession类。

我已经编写了这个非常基本的帮助程序类,用于发送请求:

class WebRequest
{
    static func getAsync(_ urlString: String, callback: @escaping (Data?, Error?) -> Void)
    {
        let url = URL(string: urlString)

        let request = URLRequest(url: url!, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 10)

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

            callback(data, error)
        })

        task.resume()
    }

    static func postAsync(_ urlString: String, callback: @escaping (Data?, HTTPURLResponse?) -> Void)
    {
        let url = URL(string: urlString )
        let request = NSMutableURLRequest(url: url!)
        request.httpMethod = "POST"
        request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData

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

            let httpResponse = response as? HTTPURLResponse
            callback(data, httpResponse)
        })

        task.resume()
    }
}

用法:

WebRequest.getAsync(url)
{
    data, error in

    if let error = error
    {
        // Error Handling
    }
    else if let data = data
    {
        let decoder = JSONDecoder()
        let myObject = try? decoder.decode(YourCodableDataModelClass.self, from: data)

        if let object = myObject
        {
            // Your JSON was parsed successfully.
        }
        else
        {
            // Object coould not be loaded.
        }
    }
}

为此,您的课程应实现Codable协议。