我正在尝试连接我的HTTP服务器以获取JSON格式的数据。它可以正确连接和获取数据。我能够在task.resume()
之前打印数据,但是在task.resume()
之后它不会打印。此外,该函数返回空对象。
我尝试在task.resume()
之前将其保存到全局变量中。所以,我可以使用getter方法来获取数据,但仍然返回空。
func getTicketInfo(rDate: String, rName: String) -> NSDictionary {
var obj = NSDictionary()
let request = NSMutableURLRequest(URL: NSURL(string: self.host)!)
request.HTTPMethod = "POST"
let postString = "&DriverName=\(self.username);&Password=\(self.password);&Function=getTicketPrintInvoiceInfo;&routeName=\(rName);&routeDate=\(rDate);";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)", terminator: "")
return
}
var parseError: NSError?
let parsedObject: AnyObject?
do {
parsedObject = try NSJSONSerialization.JSONObjectWithData(data!,
options: NSJSONReadingOptions.AllowFragments)
} catch let error as NSError {
parseError = error
parsedObject = nil
} catch {
fatalError()
}
obj = (parsedObject as? NSDictionary)!
//prints the object fine
print(obj)
}
task.resume()
//prints empty result
print(obj)
return obj;
}
答案 0 :(得分:0)
因为这是async
请求。你在块之外执行的那行代码还没有得到任何结果。所以,你什么都看不到。如果您正在尝试调试它。执行顺序如下:
task.resume()
//prints empty result
print(obj)
return obj;
然后,下一次执行将是print(obj)
内部。当然,如果网络不好,它会有点慢。
答案 1 :(得分:0)
首次打印后出现此代码(obj)
DispatchQueue.main.async {
UserDefaults.standard.setValue("\(obj)", forKey: "objGlobal")
}
这会将obj记录到UserDefauls。当你需要它时,你可以从那里抓住它。