所以我们有这个函数可以检索 JSON 数据并将其呈现在其完成 block 中,我想了解的是为什么使用签名:((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()
}
最佳答案
Swift 语法规定您必须在 ->
之后声明带有返回类型的闭包。
你有两个选择:
typealias JSONData = (Data) -> Void
typealias JSONData = (Data) -> ()
我看到苹果最常使用#1。
关于ios - 在检索 JSON 数据时,让完成 block 返回 Void 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47725187/