2017-01-24 2 views
0

나는 Swift 3에서 번역하려고하는 obj-c로 작성된이 코드 청크를 가지고 있지만 NSURLConnection.sendSynchronousRequest는 비동기식이며 동기식 작업을 사용하고 있으므로 내 지식이 나쁘다.NSURLConnection sendSynchronousReques replacement

NSData *responseData = [NSURLConnection sendSynchronousRequest:requestData returningResponse:&response error:&requestError]; 
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil]; 

더 좋은 방법이를 쓰기 다시하고 왜 그렇게 당신은 내가 수있는 방법에 어떤 제안이 있습니까 : 여기

코드인가?

+2

가능한 복제 (http://stackoverflow.com/questions/32441229/nsurlconnection-deprecated-in-ios9) – Larme

답변

1

비동기 요청을하는 데 필요한 최소 코드입니다. 많은 호출을 대체하는 경우 API 레이어를 만들고 모든 곳에서 복사/파스타가 아닌 코드를 다시 사용해야합니다.

let url = URL(string: "http://myURL.com")!; 
let request = URLRequest(url: url) 
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in 
     let dictionary = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) 
} 
task.resume() 
0

var request = NSMutableURLRequest(URL: NSURL(string: "request url")!) 
var session = NSURLSession.sharedSession() 
request.HTTPMethod = "POST" 

var params = ["username":"username", "password":"password"] as Dictionary<String, String> 

request.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(params, options: []) 

request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
request.addValue("application/json", forHTTPHeaderField: "Accept") 

var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
    print("Response: \(response)")}) 

task.resume() 
0

URLSession처럼하려고하면 URLSession 클래스와 관련 클래스는 HTTP/HTTPS 프로토콜을 통해 콘텐츠를 다운로드하기위한 API를 제공하는 아이폰 OS 7에 도입 NSURLConnection를 대체합니다. URLSession API는 기본적으로 비동기입니다. 다음은

는 간단한 GET 요청은

public func simpleNetworkRequest(completion: @escaping (_ JSON: [[String: Any]]?, _ error: Error?) -> Void) { 

     // Set up the URL request 
     let todoUrl: String = "https://jsonplaceholder.typicode.com/todos/1" 

     guard let url = URL(string: todoUrl) else { 
      print("Error: cannot create URL") 
      return 
     } 

     let urlRequest = URLRequest(url: url) 

     // set up the session 
     let config = URLSessionConfiguration.default 
     let session = URLSession(configuration: config) 

     // make the request 
     let task = session.dataTask(with: urlRequest) { (data, response, error) in 

      guard error != nil else { 
       print(error!.localizedDescription) 
       completion(nil, error) 
       return 
      } 

      // make sure we got data 
      guard let responseData = data else { 
       print("Error: did not receive data") 
       completion(nil, nil) 
       return 
      } 

      // parse the result as JSON, since that's what the API provides 
      do { 
       guard let JSON = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: AnyObject] else { 
        print("error trying to convert data to JSON") 
        completion(nil, nil) 
        return 
       } 

       print("JSON response : \(JSON)") 

       //code to parse json response and send it back via completion handler 
       let result = JSON["result"] as? [[String: Any]] 
       completion(result, nil) 

      } catch let error { 
       print(error.localizedDescription) 
       completion(nil, error) 
      } 
     } 

     task.resume() 
    } 

이 다음은 또는 당신이 Alamofore을 사용할 수 있습니다

https://videos.raywenderlich.com/courses/networking-with-nsurlsession/lessons/1

https://www.raywenderlich.com/110458/nsurlsession-tutorial-getting-started

을 언급 얻을 수있는 무료 리소스입니다 URLSession API를 사용 (권장) 네트워크 요청을하려면

,210

간단한 예는 요청이 될 수 있도록하는

Alamofire.request("https://httpbin.org/get").responseJSON { response in 
     print(response.request) // original URL request 
     print(response.response) // HTTP URL response 
     print(response.data)  // server data 
     print(response.result) // result of response serialization 

     if let JSON = response.result.value { 
      print("JSON: \(JSON)") 
     } 
    } 
[iOS9에서 사용되지 않는있는 NSURLConnection]의