我有一个名为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?< / p>
答案 0 :(得分:2)
好的,这是你的问题,你正在调用dataTaskWithURL(async)。
当时你这样做:
print(self.data.count)
您的网络服务电话尚未完成。
当您将此行放在大括号内时,它仅在调用有响应时运行。这就是它按预期工作的原因。
这是一个时间问题,你想要评估一个尚未存在的价值。
答案 1 :(得分:-1)
在你的班级中添加
(defun my-set-mark ()
(interactive)
(push-mark (point) t nil))
(defadvice find-file (before set-mark activate) (my-set-mark))
(defadvice goto-char (before set-mark activate) (my-set-mark))
(defadvice goto-line (before set-mark activate) (my-set-mark))
(defadvice isearch-update (before set-mark activate) (my-set-mark))
(defadvice beginning-of-buffer (before set-mark activate) (my-set-mark))
(defadvice end-of-buffer (before set-mark activate) (my-set-mark))
在您的方法中
var yourData:NSArray?