[swift]NSURLSession 发送 get 参数

标签: json Swift
发布时间: 2017/3/4 19:03:05
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图解析信息从 php,但我需要发送一个字典参数,所以我尝试事物......看到了教程,例子,但我被困所以又回到开始: (什么的好方法做到这一点?)

       func asd(){
    let urlPath = "http://xxxxx.php"

    let url: NSURL = NSURL(string: urlPath)

    let request = NSMutableURLRequest(URL: url)
    request.HTTPMethod = "GET"
    var parm = ["id_xxxx": "900"] as Dictionary


    //I THINK MY PROBLEM IT'S HERE! i dont know how to link parm with session, i try is with session.uploadTaskWithRequest(<#request: NSURLRequest?#>, fromData: <#NSData?#>) but doesn't work

    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
        println("Task completed")
        if(error) {
            // If there is an error in the web request, print it to the console
            println(error.localizedDescription)
        }
        var err: NSError?
        var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
        if(err?) {
            // If there is an error parsing JSON, print it to the console
            println("JSON Error \(err!.localizedDescription)")
        }
        println(jsonResult.debugDescription)
        let results: NSArray = jsonResult["x"] as NSArray
        dispatch_async(dispatch_get_main_queue(), {
            self.tableData = results
            self.OfertaGridViewLista!.reloadData()
            })
        })
    task.resume()
}

谢谢你 !

解决方法 1:

得到的数据都是 url 的查询字符串的一部分。一些方法将接受邮政/PUT 请求参数的字典,但这些方法将不添加字典到 url 为你如果你使用 GET 方法。

如果你想保持你 GET 参数为清洁或一致性的字典中,考虑到您的项目添加类似于下面的方法︰

func buildQueryString(fromDictionary parameters: [String:String]) -> String {
    var urlVars:[String] = []

    for (k, value) in parameters {
        if let encodedValue = value.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) {
            urlVars.append(k + "=" + encodedValue)
        }
    }

    return urlVars.isEmpty ? "" : "?" + urlVars.joinWithSeparator("&")
}

此方法将以键/值对的字典并返回一个字符串,你可以将追加到您的 url。

例如,如果您的 API 请求允许为多个请求方法 (GET/邮政/等) 你会只想将此查询字符串追加到 GET 请求你基 api url:

if (request.HTTPMethod == "GET") {
    urlPath += buildQueryString(fromDictionary:parm)
}

只会让你得到请求,无需检查哪一种方法,您将使用数据的发送。

赞助商