【发布时间】:2017-09-19 12:29:45
【问题描述】:
我目前有以下课程:
class Anton {
//URL to web service (Internal)
let URL_DISPLAY_MENU = "http://192.168.1.100/api/DisplayMenu.php"
func displayMenu(completion: @escaping ([[String:Any]]) ->()) {
let requestURL = URL(string: URL_DISPLAY_MENU)
var request = URLRequest(url: requestURL!)
request.httpMethod = "POST"
var menu: [[String:Any]]?
let task = URLSession.shared.dataTask(with: request) { data,response,error in guard let data = data, error == nil else {
print("error=\(String(describing: error))")
return
}
do {
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
} else {
menu = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] ?? []
var dictionary = [Int:Any]()
for (index,item) in menu!.enumerated() {
let uniqueID = index
dictionary[uniqueID] = item
}
completion(menu!)
}
} catch let error as NSError {
print(error)
}
}
task.resume()
}
}
目前我使用的类&包含函数如下:
var anton = Anton()
anton.displayMenu { menu in
print(menu)
}
我想要做的是将@escaping 结果保存到全局变量中。我对逃避闭包很陌生,所以不知道该怎么做。
【问题讨论】:
-
但是@escaping ([[String:Any]]) ->() 没有结果。 ->() 表示它是无效的。你到底指的是什么结果?
-
啊,我想我的函数出错了,我想要的本质上是,从 Anton 类中的那个函数中,我想返回菜单变量。然后,当我在另一个类中的其他位置调用该函数时,我想全局保存该变量。