在第二条评论的正下方,我收到一条错误“调用'taskForDeleteMethod'的结果未使用。为什么在调用后的闭包中使用结果和错误?
func deleteSession(_ completionHandlerForDeleteSession: @escaping (_ success: Bool, _ error: NSError?) -> Void) {
/* 1. Specify parameters, method (if has {key}), and HTTP body (if POST) */
// There are none...
/* 2. Make the request */
taskForDELETEMethod { (results, error) in
/* 3. Send the desired value(s) to completion handler */
if let error = error {
print("Post error: \(error)")
completionHandlerForDeleteSession(false, error)
} else {
guard let session = results![JSONKeys.session] as? [String: AnyObject] else {
print("No key '\(JSONKeys.session)' in \(results)")
return
}
if let id = session[JSONKeys.id] as? String {
print("logout id: \(id)")
completionHandlerForDeleteSession(true, nil)
}
}
}
}
答案 0 :(得分:3)
在早期的swift版本中,您无需担心方法的返回值。您可以将它存储在任何变量中并稍后使用它,或者您可以完全忽略它。它没有给出任何错误或警告。
但是在 swift 3.0 中,您需要指定是否要忽略返回的值或使用它。
<强> 1 即可。如果要使用返回的值,可以创建变量/常量并将值存储在其中,即
let value = taskForDELETEMethod {
// Your code goes here
}
<强> 2 即可。如果要忽略返回的值,可以使用 _ ,即
let _ = taskForDELETEMethod {
// Your code goes here
}
答案 1 :(得分:0)
您混淆了results
变量,它实际上是在闭包内使用的,以及taskForDELETEMethod
调用本身的结果,即NSURLSessionDataTask
对象。
从我在网上找到的使用taskForDELETEMethod
的示例看来,忽略返回值似乎完全没问题,因此您可以通过将结果分配给_
变量来避免此警告,即
let _ = taskForDELETEMethod {
... // The rest of your code goes here
}