【发布时间】:2016-08-18 13:49:55
【问题描述】:
最近,我尝试编写自己的Telegram Bot API。但是,该项目似乎遇到了 URLSession(以前的 NSURLSession)问题。
调用结构如下:
getMe() -> getData() -> NSURLSession
理想情况下,我希望将NSURLSession 返回的数据传回getMe() 以供应用程序处理。但是,我尝试过的方法无法证明这是可行的。
以下是我一直在使用的代码。 synthesiseURL() 生成应用程序应打开会话的 URL,以便对 Telegram Bot API 执行操作。 synthesiseURL()生成的URL模板为https://api.telegram.org/bot\(token)/\(tgMethod)。
// NSURLSession getData: gets data from Telegram Bot API
func getData(tgMethod: String, arguments: [String] = [String](), caller: String = #function) {
let url = synthesiseURL(tgMethod: "getMe"), request = NSMutableURLRequest(url: url)
var receivedData = String()
let session = URLSession.shared.dataTask(with: request as URLRequest) { data, response, err in
if err != nil {print(err!.localizedDescription); return}
DispatchQueue.main.async {
receivedData = String(data: data!, encoding: String.Encoding.nonLossyASCII)!
print(receivedData)
}
}
session.resume()
}
我一直试图让getData 将包含Bot API 响应的receivedData 传递回函数getMe。
func getMe() -> String {
HTTPInterface(botToken: token).get(tgMethod: "getMe")
return [???] // here's where the data from getData() should come
}
我已经尝试过完成处理程序、回调、对主线程的异步调用等,但似乎都没有按预期工作(getMe() 返回一个空字符串)。
为什么会这样,能解决吗?
【问题讨论】: