Ich arbeite an einer App, die einen Login-Bildschirm, der eine Premiere für mich ist. Nachdem ich verschiedenen Webseiten gefolgt war, die Tutorials für dieses Thema zur Verfügung stellten, machte ich einen LoginService ViewController, der bei der Anmeldung in der App helfen würde.Xcode - Swift 2.0: "Extra Argument" Fehler 'in Anruf "mit NSJSONSerialization
Hier ist ein Teil des Codes, die ich in diesem Viewcontroller verwendet haben:
// MARK: Private Methods
private func exchangeTokenForUserAccessTokenWithCompletionHandler(username: String, password: String, completion: (OAuthInfo?, error: String?) ->()) {
let path = "/oauthfake/token/"
let url = ConnectionSettings.apiURLWithPathComponents(path)
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
var params = "client_id=\(ConnectionSettings.clientId)&client_secret=\(ConnectionSettings.clientSecret)&grant_type=password&login=\(username)&password=\(password)"
var err: NSError?
request.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let task = session.dataTaskWithRequest(request) {data, response, error -> Void in
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
if (err != nil) {
// Something went wrong, log the error to the console.
print(err!.localizedDescription)
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Something went wrong: '\(jsonStr)")
completion(nil, error: err?.localizedDescription)
} else {
if let parseJSON = json {
if let token = parseJSON.valueForKey("access_token") as? String {
if var issuedAt = parseJSON.valueForKey("issued_at") as? String {
if var tokenExpiresIn = parseJSON.valueForKey("expires_in") as? String {
if var refreshTokenIssuedAt = parseJSON.valueForKey("refresh_token_issued_at") as? String {
if let refreshToken = parseJSON.valueForKey("refresh_token") as? String {
if var refreshTokenExpiresIn = parseJSON.valueForKey("refresh_token_expires_in") as? String {
if let refreshCount = parseJSON.valueForKey("refresh_count") as? String {
let epochIssuedAt:Double = (issuedAt as NSString).doubleValue/1000.0
let epochRefreshTokenIssuedAt:Double = (refreshTokenIssuedAt as NSString).doubleValue/1000.0
let oauthInfo = OAuthInfo(issuedAt: epochIssuedAt, refreshTokenIssuedAt: epochRefreshTokenIssuedAt, tokenExpiresIn: (tokenExpiresIn as NSString).doubleValue, refreshToken: refreshToken, token: token, refreshTokenExpiresIn: (refreshTokenExpiresIn as NSString).doubleValue, refreshCount: (refreshCount as NSString).integerValue)
completion(oauthInfo, error: err?.localizedDescription)
Mein super.init scheint in fein (nicht oben gekennzeichnet), sowie den Rest des Codes zu arbeiten, diese Datei, aber ich bekomme einen Fehler beim Lesen der „extra-Argument‚Fehler‘in Call“ auf dieser Linie:
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
ich habe gesammelt schon, dass Swift 2.0 Fehler anders zu dem, was Greift ich gewohnt bin. Ich weiß, dass diese Version von Swift für Fehler Fehlercodes verwendet. Mein Problem ist, dass ich keine dieser Codearten zuvor verwendet habe und mir nicht sicher bin, wie ich sie in dieser speziellen Situation einsetzen soll.
Danke für das Feedback, zu sehen, wie Sie die Syntax ausgelegt haben, war sehr hilfreich! Wenn es in Ordnung ist zu fragen (ich lerne immer noch darüber, tut mir leid), wollte ich sicherstellen, dass ich genau weiß, wo genau ich den Do Try Catch-Code im Vergleich zu der Zeile mit dem NSJSONSerialization-Fehler setzen sollte. –
@ R.Osolinski: Möchten Sie zwei NSJSONSerialization vergleichen? – Donal