嗨,我是
Swift的初学者,我正在努力使NSURLSession“发布”请求发送一些参数,如下面的代码
根据我的下面的代码响应不是来自服务器可以有人帮助我
BackGroundClass: –
import UIKit protocol sampleProtocal{ func getResponse(result:NSDictionary) func getErrorResponse(error:NSString) } class BackGroundClass: NSObject { var delegate:sampleProtocal? func callPostService(url:String,parameters:NSDictionary){ print("url is===>\(url)") let request = NSMutableURLRequest(URL: NSURL(string:url)!) let session = NSURLSession.sharedSession() request.HTTPMethod = "POST" //Note : Add the corresponding "Content-Type" and "Accept" header. In this example I had used the application/json. request.addValue("application/json",forHTTPHeaderField: "Content-Type") request.addValue("application/json",forHTTPHeaderField: "Accept") request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters,options: []) let task = session.dataTaskWithRequest(request) { data,response,error in guard data != nil else { print("no data found: \(error)") return } do { if let json = try NSJSONSerialization.JSONObjectWithData(data!,options: []) as? NSDictionary { print("Response: \(json)") self.mainResponse(json) } else { let jsonStr = NSString(data: data!,encoding: NSUTF8StringEncoding)// No error thrown,but not NSDictionary print("Error could not parse JSON: \(jsonStr)") self.eroorResponse(jsonStr!) } } catch let parseError { print(parseError)// Log the error thrown by `JSONObjectWithData` let jsonStr = NSString(data: data!,encoding: NSUTF8StringEncoding) print("Error could not parse JSON: '\(jsonStr)'") self.eroorResponse(jsonStr!) } } task.resume() } func mainResponse(result:NSDictionary){ delegate?.getResponse(result) } func eroorResponse(result:NSString){ delegate?.getErrorResponse(result) } }
视图控制器: –
import UIKit class ViewController: UIViewController,sampleProtocal { override func viewDidLoad() { super.viewDidLoad() let delegate = BackGroundClass(); delegate.self; let params = ["scancode":"KK03799-008","UserName":"admin"] as Dictionary<String,String> let backGround=BackGroundClass(); backGround.callPostService("url",parameters: params) } func getResponse(result: NSDictionary) { print("Final response is\(result)"); } func getErrorResponse(error: NSString) { print("Final Eroor code is\(error)") } }
解决方法
Swift 4.0发布示例 –
func postAction(_ sender: Any) { let Url = String(format: "your url") guard let serviceUrl = URL(string: Url) else { return } let parameterDictionary = ["username" : "Test","password" : "123456"] var request = URLRequest(url: serviceUrl) request.httpMethod = "POST" request.setValue("Application/json",forHTTPHeaderField: "Content-Type") guard let httpBody = try? JSONSerialization.data(withJSONObject: parameterDictionary,options: []) else { return } request.httpBody = httpBody let session = URLSession.shared session.dataTask(with: request) { (data,error) in if let response = response { print(response) } if let data = data { do { let json = try JSONSerialization.jsonObject(with: data,options: []) print(json) }catch { print(error) } } }.resume() }