调用中的额外参数“错误” - 无法构建我的 Xcode 项目

Posted

技术标签:

【中文标题】调用中的额外参数“错误” - 无法构建我的 Xcode 项目【英文标题】:Extra argument 'error' in call - Unable to build my Xcode project 【发布时间】:2015-09-03 07:19:25 【问题描述】:
import Foundation

class NetworkOperation 

    lazy var config: NSURLSessionConfiguration =     NSURLSessionConfiguration.defaultSessionConfiguration()
    lazy var session: NSURLSession = NSURLSession(configuration: self.config)
    let queryURL: NSURL

    typealias JSONDictionaryCompletion = ([String: AnyObject]? -> Void)

    init(url: NSURL) 
        self.queryURL = url
    

    func downloadJSONFromURL(completion: JSONDictionaryCompletion) 

        let request = NSURLRequest(URL: queryURL)
        let dataTask = session.dataTaskWithRequest(request) 
            (let data, let response, let error) in

// 1. 检查 HTTP 响应是否成功 GET 请求

            if let httpResponse = response as? NSHTTPURLResponse 
                switch httpResponse.statusCode 
                case 200:

// 2. 使用数据创建 JSON 对象

                    let jsonDictionary = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil)
                    completion(jsonDictionary)
                default:
                    print("GET request not successful. HTTP status code: \(httpResponse.statusCode)")
                
             else 
                print("Error: Not a valid HTTP response")
            
        

        dataTask.resume()
    

在“使用数据创建 JSON 对象”步骤中,我不断收到“调用中的额外参数'错误'”。怎么了?我无法找到进一步帮助我的文档。

【问题讨论】:

【参考方案1】:

你可以这样做。

do
        var jsonDictionary  = try NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers)
        //completion(jsonDictionary)
    catch
       // report error
    

【讨论】:

我还没用过'do'/'catch'。这让我想起了 Python 的 'try'/'except'。我不确定如何在 Swift 中正确执行此操作,您能否指导我查看更多文档或更好地解释它?谢谢! 另外,我是否要删除整个“if let”语句并添加“do”/“catch”?还是我只是删除“// 2.”下的所有内容?谢谢! 将“case 200:”的所有内容放入try块中 不幸的是,这并没有解决它。我设法清除了该错误,但现在我收到另一个关于“完成(jsonDictionary)”的消息,说它无法使用“(AnyObject?)”类型的参数列表调用“完成” 在“completion: JSONDictionaryCompletion”中,完成的参数是 JSONDictionaryCompletion 但你试图将参数作为 Anyobject 传递,这会导致不匹配。因此您需要将“jsonDictionary”自定义为 JSONDictionaryCompletion。注意:点击红色错误标记,它会显示可能的解决方案并按下回车/写下它所说的内容。【参考方案2】:

在第 2 步的顶部:创建 json....

添加这一行:

var err: NSError?

【讨论】:

这不起作用。感谢您的意见,不胜感激。【参考方案3】:

// 1. 检查 HTTP 响应是否成功 GET 请求

            if let httpResponse = response as? NSHTTPURLResponse 
                switch httpResponse.statusCode 
                case 200:

// 2. 用数据创建 JSON 对象

                    let jsonDictionary = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? [String: AnyObject]
                    completion(jsonDictionary)
                default:
                    println("GET request not successful. HTTP status code: \(httpResponse.statusCode)")
                
             else 
                println("Error: Not a valid HTTP response")
            
        

        dataTask.resume()
    

终于明白了!谢谢大家的意见!

【讨论】:

以上是关于调用中的额外参数“错误” - 无法构建我的 Xcode 项目的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 请求收到错误“调用中的额外参数”

SwiftUI:随机“调用中的额外参数”错误

Swift 3.0 迁移后的 Alamofire 错误:“调用中的额外参数”(请求方法)

调用中的额外参数“方法”。阿拉莫菲尔

无法在 ViewModel 中的 Intent 中添加额外内容

Swift 2中的“调用中的额外参数'错误'”错误[重复]