如何从完成处理程序返回一个值

时间:2016-03-28 15:34:01

标签: ios swift completionhandler

我正在尝试学习如何将我的应用程序连接到REST数据库。我正在连接到一个名为JSONPlaceholder.com的虚拟数据库,并已成功检索数据。我现在想将NSDictionary转换为自定义对象。这是GET方法。

func apiGet () -> NSDictionary? {
var returnedNSDict: NSDictionary?
let postEndpoint = "http://jsonplaceholder.typicode.com/posts/1"
guard let url = NSURL(string: postEndpoint) else {
    print("Error: cannot create URL")
    return returnedNSDict
}

let urlRequest = NSMutableURLRequest(URL: url)
urlRequest.HTTPMethod = "GET"
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
  let session = NSURLSession(configuration: config)
  let task = session.dataTaskWithRequest(urlRequest, completionHandler:
    { (data: NSData?, response: NSURLResponse?, error: NSError?) in
        guard let returnedData = data else {
            print("Error: did not receive data")
            return
        }
        guard error == nil else {
            print ("Error calling get is: \(error)")
            return
        }

        let post: NSDictionary
        do {
            post = try NSJSONSerialization.JSONObjectWithData(returnedData,
                options: []) as! NSDictionary
        } catch  {
            print("error calling GET")
            return
        }
        returnedNSDict = post
})

task.resume()
return returnedNSDict

}

您会注意到该方法应该返回NSDictionary。我的想法是,如果我可以使用此方法返回NSDictionary,那么我可以从其他地方调用它并将该字典转换为自定义对象。

我的问题是完成后似乎在方法的返回调用之后运行,因此保持返回NIL。如何在完成处理程序中将我正在访问的NSDictionary分配给我可以在调用此方法时返回的值?

提前致谢。

0 个答案:

没有答案