在Swift中进行异步GET / POST请求

j

我已经为发出GET请求编写了此类

    class GETReq{
func HTTPsendRequest(request: NSMutableURLRequest, callback: (String, String?) -> Void) {
            let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {  (data, response, error) -> Void in

                dispatch_async(dispatch_get_main_queue()) {
                    if (error != nil) {
                        callback("", error.localizedDescription)
                    } else {
                        callback(NSString(data: data,encoding: NSUTF8StringEncoding)!, nil)
                    }
                }
            }
            task.resume()
    }   

func HTTPGet(url: String, callback: (String, String?) -> Void) {
    var request = NSMutableURLRequest(URL: NSURL(string: url)!)
    HTTPsendRequest(request, callback) }
}

在另一个名为“ ManageData”的类中

class ManageData{

    func makeTheRequest()->String{
        var makeReq:GETReq=GETReq();
        var ret:String="";

        makeReq.HTTPGet("http://www.example.com/fileExample.php") { (data:String, error:String?) -> Void in
            if(error==nil){ ret="error"; } else { ret="ok"; }
        }
        return ret;
    }
}

问题是在ViewController类中

 var result:String =  manageData.makeTheRequest();

“ result”变量始终为空,因为makeTheRequest函数在完成get请求之前会返回“ ret”。

您应该makeTheRequest采用与其他地方相同的完成关闭模式。因此,更改makeTheRequest为不返回任何值,而是采用一个callback参数,参数是在请求完成时将调用的闭包:

func makeTheRequest(callback: (String, String?) -> Void) {
    var makeReq:GETReq=GETReq();
    var ret:String="";

    makeReq.HTTPGet("http://www.example.com/fileExample.php", callback)
}

您大概会这样称呼它:

makeTheRequest() { string, error in 
    if error != nil {
        println(error)
        return
    }

    // if you got here, you can use `string`

    println(string)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Swift中进行异步GET / POST请求

来自分类Dev

异步HTTPS POST请求

来自分类Dev

在GET请求中进行for循环

来自分类Dev

POST然后GET请求

来自分类Dev

多个 POST 请求的异步问题

来自分类Dev

在命令行应用程序中使用Swift在URLSession中进行POST请求

来自分类Dev

POST请求变成GET请求

来自分类Dev

在 get 请求中嵌套 http post 请求

来自分类Dev

在POST请求中进行翻新发送JSON

来自分类Dev

使用QNetworkAccessManager在QT中进行HTTP POST请求

来自分类Dev

如何在php artisan中进行测试POST请求?

来自分类Dev

在Swift中执行POST请求

来自分类Dev

在Swift中执行POST请求

来自分类Dev

POST请求Swift 3.0 Alamofire

来自分类Dev

Swift Alamofire POST请求变为GET

来自分类Dev

Swift Alamofire POST请求变为GET

来自分类Dev

使用Node.js异步请求在Redis中进行循环

来自分类Dev

C#在foreach循环中进行异步http请求

来自分类Dev

使用Node.js异步请求在Redis中进行循环

来自分类Dev

POST请求变为GET

来自分类Dev

405 - 请求GET和POST

来自分类Dev

POST请求变为GET

来自分类Dev

无法在Scala中进行简单的GET请求

来自分类Dev

收到POST请求时发送标头200状态,然后稍后在同一文件中进行GET

来自分类Dev

如何与纽曼(Newman)进行POST请求?

来自分类Dev

Alamofire POST请求正在进行

来自分类Dev

使用请求参数或POST进行获取

来自分类Dev

请求使用python进行POST编码

来自分类Dev

nginx将POST请求重定向到GET请求