swift中POST请求出错

时间:2016-04-15 09:55:07

标签: swift nsurlsession

我希望成为一种可以发送到字典服务器的变量,但是在线上我遇到了问题let task = session.dataTaskWithRequest(todosUrlRequest)错误:Cannot convert value of type 'NSURL' to expected argument type 'NSURLRequest'

我有两个问题

1)这个错误是什么?

2)我用于POST的程序是对的吗?不需要任何其他东西。 ?? 谢谢你的帮助

func data_request (){

            let url = "http://sample.com/api/Flight/GetTicketInformation"
            guard let todosUrlRequest = NSURL(string: url) else {
                print("Error: cannot create URL")
                return
            }

            let request = NSMutableURLRequest(URL: todosUrlRequest)
            request.HTTPMethod = "POST"
            request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

            let newTodo = ["Roundtrip": roundTrip,
                           "OneWay": oneWay,
                           "MultiWay": multiWay,
                           "Adult": numberAdults,
                           "Child": numberchild,
                           "Baby": numberinfant,
                           "SourceCityId": cityIDOrigin,
                           "DestinationCityId": cityIDPurpose,
                           "DepartingDate": raftDate,
                           "ReturningDate": bargashtDate ]
            let jsonTodo: NSData
            do {
                jsonTodo = try NSJSONSerialization.dataWithJSONObject(newTodo, options: [])
                request.HTTPBody = jsonTodo

            } catch {
                print("Error: cannot create JSON from todo")
                return
            }
            request.HTTPBody = jsonTodo

            let config = NSURLSessionConfiguration.defaultSessionConfiguration()
            let session = NSURLSession(configuration: config)

            let task = session.dataTaskWithRequest(todosUrlRequest) {
                (data, response, error) in

                guard let responseData = data else {
                    print("Error: did not receive data")
                    return
                }
                guard error == nil else {
                    print("error calling POST on /todos/1")
                    print(error)
                    return
                }

                // parse the result as JSON, since that's what the API provides
                do {
                    guard let receivedTodo = try NSJSONSerialization.JSONObjectWithData(responseData,
                                                                                        options: []) as? [String: AnyObject] else {
                                                                                            print("Could not get JSON from responseData as dictionary")
                                                                                            return
                    }
                    print("The todo is: " + receivedTodo.description)


                } catch  {
                    print("error parsing response from POST on /todos")
                    return
                }
            }
            task.resume()
        }

2 个答案:

答案 0 :(得分:2)

request

上的

todosUrlRequest代替let task = session.dataTaskWithRequest(todosUrlRequest)

对于第二个问题,不知道。抱歉

答案 1 :(得分:0)

我可以为所有请求推荐Alamofire,而不是自己编写所有代码。 https://github.com/Alamofire/Alamofire