所以我们有这个函数来检索JSON数据并将其呈现在完成块中,我试图理解的是为什么使用签名:((Data) -> Void)
而不仅仅是(Data)
, void
真的有必要吗?这是功能:
typealias JSONData = ((Data) -> Void)
func getJSONData(type: String, urlExtension: String, completion: @escaping JSONData) {
let request = URLRequest(url: URL(string:"\(baseURL)\(type)/\(urlExtension)?api_key=\(apiKey)®ion=US&append_to_response=videos,images,releases")! )
let dataTask = session.dataTask(with: request, completionHandler: { (data, response, error) in
if error == nil {
if let httpResponse = response as? HTTPURLResponse {
switch (httpResponse.statusCode) {
case 200:
if let data = data {
completion(data)
}
default:
print(httpResponse.statusCode)
}
}
} else {
DispatchQueue.main.async {
if let error = error {
print("Error: \(error.localizedDescription)") }
return
}
}
})
dataTask.resume()
}
答案 0 :(得分:1)
Swift语法规定你必须在 Value
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
10: 10
之后用返回类型声明闭包。
您有两种选择:
->
typealias JSONData = (Data) -> Void
我最常使用#1来看Apple。