调用结果未使用

Posted

技术标签:

【中文标题】调用结果未使用【英文标题】:Result of call is unused 【发布时间】:2016-09-25 22:57:49 【问题描述】:

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

【问题讨论】:

【参考方案1】:

早期的 swift 版本中,您不必担心方法的返回值。您可以将它存储在任何变量中并稍后使用它,或者您可以完全忽略它。它既没有给出任何错误,也没有给出警告。

但是在 swift 3.0 中你需要指定是忽略返回值还是使用它。

1。如果要使用返回值,可以创建一个变量/常量并将值存储在其中,即

let value = taskForDELETEMethod 
    // Your code goes here

2。如果要忽略返回值,可以使用 _ ,即

let _ = taskForDELETEMethod 
    // Your code goes here

【讨论】:

更好的是,你可以只做'_ = method()'。当您不需要返回值时,您不必指定 let。【参考方案2】:

您混淆了results 变量(实际上是在闭包内部使用)和taskForDELETEMethod 调用本身的结果,即NSURLSessionDataTask 对象。

从我在网上找到的使用taskForDELETEMethod 的示例看来,忽略返回值是完全可以的,因此您可以通过将结果分配给_ 变量来避免此警告,即

let _ = taskForDELETEMethod 
    ... // The rest of your code goes here

【讨论】:

以上是关于调用结果未使用的主要内容,如果未能解决你的问题,请参考以下文章

调用“updateWeatherIcon(condition:)”的结果未使用,因此不会显示 UIImage

Swift 3:覆盖成为FirstResponder时警告“未使用的调用结果”

Swift 中的 Alamofire .post。 “调用结果未使用,但产生‘DataRequest’

在部分模拟的对象上调用 + [NSBundle bundleForClass:] 返回的结果与未模拟的对象不同?

未调用 Paint 方法

如何处理 Swift 的“尝试”?导致“尝试的结果?未使用”? [复制]