URL을 받고 단순히 웹 페이지의 HTML을 반환하는 간단한 함수를 만들려고했습니다. NSURLSessionDataTask
그 자체가 작동하는 것처럼 보입니다. 나는 println(data)
일 때 전체 HTML을 볼 수 있습니다. 그러나 func
은 초기 값 "# !?"만 반환합니다. DataTask
이 비동기식으로 작동한다고 생각합니까?
어떻게 처리 할 수 있습니까?NSURLSessionDataTask : func은 데이터를 받지만 아무 것도 반환하지 않습니다.
func loadHTML(targetURL: String) -> String {
var theTargetURL = NSURL(string:targetURL)
var theResult = "#!?"
var request: NSURLRequest = NSURLRequest(URL:theTargetURL)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
println(NSString(data: data, encoding: NSASCIIStringEncoding))
if error != nil {
println(error.localizedDescription)
theResult = "error"
}
if data != nil {
theResult = NSString(data: data, encoding: NSASCIIStringEncoding)
println("RECEIVED\t\t\(countElements(theResult)) CHARS")
}
});
task.resume()
return theResult
}
당신은 전에 비동기 프로그래밍을 수행 한 당신의 방법에서 호출? 이것은 비동기 모델이지만 함수는 즉각적으로 반환되어 즉 치값을 반환합니다. 그러나 요청은 URL에서 콘텐츠를로드하고 가져 오는 데 시간이 오래 걸립니다. 함수에서 완료 블록을 사용하면 요청이 완료 될 때 호출되는 것이 더 좋습니다. – Sandeep
왜 비동기가되어야하는지 이해했지만 작동 완료 블록을 얻을 수 없습니다. 'func'의 끝에서'return'을 포기할 수는 없지만'data! = nil {}'내부에서'return theResult'를 호출하면 'String은 Void로 변환 될 수 없습니다'오류가 발생합니다 . 예를 들어 주시겠습니까? – ixany