我从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()
}
谁能告诉我我做错了什么?谢谢!
答案 0 :(得分:0)
我认为您的问题是由于您为不同的事情使用error
变量两次这一事实引起的。它被声明一次作为块的参数
httpGet(request) { string, error in
和catch
处理程序中的第二次。
} catch let error as NSError {
尝试重命名其中一个,例如
} catch let parsingError as NSError {
还有另一个问题,你的闭包声明为返回Void
,但你试图从中返回String
。
另一方面,您的userNameCall
应返回String
,但不会返回任何内容。
解决了这些问题后,我能够成功编译代码。