通话结果未使用

时间:2016-09-25 22:57:50

标签: swift function closures

在第二条评论的正下方,我收到一条错误“调用'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)
            }
        }
    }
}

2 个答案:

答案 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
}