【发布时间】:2016-08-17 15:31:03
【问题描述】:
我在一个名为 WebService 的类中有这个方法,在这个方法中我从一个 API 获取数据:
func GetTableDataOfPhase(phase: String, completion: (result: AnyObject) -> Void)
{
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
let requestString = NSString(format:"%@?jobNo=%@", webservice, phase) as String
let url: NSURL! = NSURL(string: requestString)
let task = session.dataTaskWithURL(url, completionHandler: {
data, response, error in
dispatch_async(dispatch_get_main_queue(),
{
do
{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [AnyObject]
completion(result: json!)
}
catch
{
print(error)
}
})
})
task.resume()
}
现在我从另一个类中调用此方法,如下所示:
WebService().GetTableDataOfPhase("ORC0005")
{
(result: AnyObject) in
self.data = result as! NSArray
}
这按预期工作。现在我正在尝试从完成处理程序中获取结果
所以我可以这样做:
WebService().GetTableDataOfPhase("ORC0005")
{
(result: AnyObject) in
self.data = result as! NSArray
}
print(self.data.count)
现在 self.data.count 是 0,但是当我把这个 print 语句放在大括号内时,它是 70,我如何得到大括号外的结果,以便我可以使用 self.data.count ?
【问题讨论】:
-
您应该更新您的问题,显示您实际打算如何使用数据。
-
异步调用完成处理程序。所以反过来做。使用花括号内的结果。并使用一致的类型,
[AnyObject]->AnyObject->NSArray是同一事物的三种不同类型。
标签: ios swift completionhandler