2017-01-27 8 views
0

다음과 같은 데이터로드 기능이 있습니다. 이 기능은 며칠 전에 잘 작동했습니다. 앱에서 모든 URL을로드하려고하면 오류가 발생하며 아래 코드와 스크린 샷을 참조하십시오. 년 IOS/신속한에게 몇 가지 일을 코딩, 꽤 하드 ... 무엇이 잘못되었는지 파악이 엑스 코드 8.2에서 작동 최신 스위프트 3.0 구문 코드 아래앱 갑작스런 충돌로드 URL

enter image description here

class func loadDataFromURL(_ url: URL, completion:@escaping (_ data: Data?, _ error: NSError?) -> Void) { 
let session = URLSession.shared 

// Use NSURLSession to get data from an NSURL 
let loadDataTask = session.dataTask(with: url, completionHandler: { (data: Data?, response: URLResponse?, error: NSError?) -> Void in 
    if let responseError = error { 
    completion(nil, responseError) 
    } else if let httpResponse = response as? HTTPURLResponse { 
    if httpResponse.statusCode != 200 { 
     let statusError = NSError(domain:"com.xyz", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) 
     completion(nil, statusError) 
    } else { 
     completion(data, nil) 
    } 
    } 
} as! (Data?, URLResponse?, Error?) -> Void) 

loadDataTask.resume() 
} 
+0

이렇게 '스위프트 3'에서 'dataTask'의 'completionHandler'서명이 변경되었습니다. { }의 loadDataTask = session.dataTask (데이터 : 데이터, 응답 : URL 응답? (Data?, URLResponse ?, Error?) -> Void)'끝 –

+0

* 어디에서 충돌했는지 아십니까? 그렇지 않다면 각 줄 다음에 몇 개의 중단 점 및/또는 인쇄 문을 배치하십시오. 그게 우리가 * 왜 * 충돌을 일으키는가에 가깝게 만듭니다. – LinusGeffarth

답변

1

사용하는 방법 : -

func loadDataFromURL(_ url: URL, completion:@escaping (_ data: Data?, _ error: NSError?) -> Void) { 
     let session = URLSession.shared 

     // Use NSURLSession to get data from an NSURL 

     let loadDataTask = session.dataTask(with: url) { (data, response, error) in 
      if let responseError = error { 
       completion(nil, responseError as NSError?) 
      } else if let httpResponse = response as? HTTPURLResponse { 
       if httpResponse.statusCode != 200 { 
        let statusError = NSError(domain:"com.xyz", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) 
        completion(nil, statusError) 
       } else { 
        completion(data, nil) 
       } 
      } 
     } 
     loadDataTask.resume() 

    }