调用错误Swift中的额外参数

时间:2016-02-11 21:51:39

标签: ios xcode swift

我从httpGet(请求)收到错误“调用中的额外参数”,我不知道为什么。我看了几个堆栈交换解决方案,看起来我正在做解决方案所建议的一切。 Extra argument 'error' in call. Compilation error in Swift 2.0。特别是这个解决方案 - 看起来我正在正确地进行错误处理。

    class func userNameCall() -> String {

        let request = NSMutableURLRequest(URL: NSURL(string: "my url goes here")!)

        httpGet(request) { string, error in
            guard error == nil && string != nil else {
                print(error?.localizedDescription)
                return
            }
            let data = string!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
            do {
                let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]

                //if JSON returns error with key "msg" meaning log in was not successful
                if let message = json["msg"] as! String?{
                    if (message == "Invalid login."){
                        self.signInFailedAlert()
                        return "Invalid login"
                    }
                }

                //if JSON has key "value", meaning a session ID was created and login was successful, continue to second call
                if let sessionID = json["value"] as! String?{
                    print("sessionID from httpCall class: " + sessionID)
                    return sessionID
                }
            } catch let error as NSError { //
                print("Failed to load: \(error.localizedDescription)")
            }
        }
    }

func httpGet(request: NSURLRequest, callback: (String?, NSError?) -> Void) {
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
            guard error == nil && data != nil else {
                callback(nil, error)
                return
            }

            callback(String(data: data!, encoding: NSUTF8StringEncoding), nil)
        }
        task.resume()
    }

谁能告诉我我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您的问题是由于您为不同的事情使用error变量两次这一事实引起的。它被声明一次作为块的参数

httpGet(request) { string, error in

catch处理程序中的第二次。

} catch let error as NSError {

尝试重命名其中一个,例如

} catch let parsingError as NSError {

还有另一个问题,你的闭包声明为返回Void,但你试图从中返回String。 另一方面,您的userNameCall应返回String,但不会返回任何内容。

解决了这些问题后,我能够成功编译代码。