Ошибка дополнительного аргумента в вызове

Я пытался войти в систему некоторое время, используя php, но у меня есть последняя ошибка, которая мешает мне закончить. Получается выдает баг в NSJSONSerialization где ошибка мне говорит: ошибка дополнительный аргумент в вызове. Затем я предоставлю скриншот, чтобы ошибка была более четкой, и код, чтобы вы могли мне помочь, так как я нахожусь в блокирующем моменте и не знаю, как ее решить. заранее спасибо

Ошибка фото: [Код:

@IBAction func loginButtonTapped(sender: AnyObject) {

    let userEmail = userEmailTextField.text;
    let userPassword = userPasswordTextField.text;



    if(userEmail!.isEmpty || userPassword!.isEmpty) { return; }

    let myUrl = NSURL(string: "http://localhost/billapp/userSignIn.php");
    let request = NSMutableURLRequest(URL:myUrl!);
    request.HTTPMethod = "POST";

    let postString = "userEmail=\(userEmail)&userPassword=\(userPassword)";

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
        data, response, error in

        if error != nil{
            print("error=\(error)")
            return
        }

        var err: NSError?

        var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error:NSError) as? NSDictionary

        if let parseJSON = json {
            var resultValue:String = parseJSON["status"] as String!;
            print("result: \(resultValue)")

            if(resultValue=="Success")
            {
                NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn");
                NSUserDefaults.standardUserDefaults().synchronize();

                self.dismissViewControllerAnimated(true, completion: nil);
            }
        }
    }
    task.resume()
}

последняя ошибка


person stack amr    schedule 03.05.2017    source источник
comment
developer.apple.com/reference/foundation/jsonserialization/ — удалить NS, измените имя метода, удалите error, заверните его в try.   -  person luk2302    schedule 03.05.2017
comment
Можете ли вы адаптировать его с моим кодом, пожалуйста?   -  person stack amr    schedule 03.05.2017
comment
Если это работает, но в строке if let parseJSON = json у меня есть ошибка, которая гласит: использование неразрешенного идентификатора 'json'   -  person stack amr    schedule 03.05.2017


Ответы (2)


Вы можете следовать советам по быстрому исправлению. Это позволит вам закончить вот так:

do {
    var json = try JSONSerialization.jsonObject(with: Data(), options: .mutableContainers)
     if let parseJSON = json {
          //your code
     }
} catch {
    //handle error
}
person shallowThought    schedule 03.05.2017
comment
Я не могу использовать это, потому что у меня Swift 2, а ваш код 3 - person stack amr; 03.05.2017
comment
Тогда почему вопрос помечен как Swift 3 @stackamr ??? - person luk2302; 03.05.2017
comment
Извините, это была ошибка. Но не могли бы вы помочь мне сделать это с помощью Swift 2? - person stack amr; 03.05.2017
comment
Swift2: stackoverflow.com/questions/31296545/ - person shallowThought; 03.05.2017
comment
Если это работает, но в строке if let parseJSON = json у меня есть ошибка, которая гласит: использование неразрешенного идентификатора 'json' - person stack amr; 03.05.2017
comment
Обновленный ответ. - person shallowThought; 03.05.2017

В отличие от Objective C, согласно новой методологии Swift, ошибки обрабатываются с помощью блока try/catch вместо передачи объекта ошибки в метод.

Используйте следующий код для Swift 3.

 do {
      var json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) 
        if let parseJSON = json {
        var resultValue:String = parseJSON["status"] as String!;
        print("result: \(resultValue)")

        if(resultValue=="Success")
        {
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn");
            NSUserDefaults.standardUserDefaults().synchronize();

            self.dismissViewControllerAnimated(true, completion: nil);
        }
    }
 } catch let error {
        //Perform the error handling here
 }

Подписка на Swift 2

do {
      var json = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers)
        if let parseJSON = json {
        var resultValue:String = parseJSON["status"] as String!;
        print("result: \(resultValue)")

        if(resultValue=="Success")
        {
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn");
            NSUserDefaults.standardUserDefaults().synchronize();

            self.dismissViewControllerAnimated(true, completion: nil);
        }
    }
 } catch let error {
        //Perform the error handling here
 }
person Tafveez Mehdi    schedule 03.05.2017
comment
это быстро 2 - person stack amr; 03.05.2017
comment
Я отредактировал ответ, чтобы включить его и для Swift 2. - person Tafveez Mehdi; 03.05.2017
comment
Если это работает, но в строке if let parseJSON = json у меня есть ошибка, которая гласит: использование неразрешенного идентификатора 'json' - person stack amr; 03.05.2017
comment
Я думаю, что вы выполняете работу из блока do. Напишите код под строкой var json = ..., и вы не получите эту ошибку. - person Tafveez Mehdi; 03.05.2017
comment
я редактирую свой пост, последняя строка я размещаю фото с ошибкой, пожалуйста, помогите мне - person stack amr; 03.05.2017
comment
нажмите на последнюю ошибку - person stack amr; 03.05.2017
comment
Я внес изменения в ответ, проверьте это сейчас. - person Tafveez Mehdi; 03.05.2017
comment
та же ошибка: инициализатор для условной привязки должен иметь необязательный тип, а не anyObject - person stack amr; 03.05.2017
comment
не могу понять почему не работает - person stack amr; 03.05.2017
comment
скачать мой проект и исправить его. www86.zippyshare.com/v/iP9iQuXX/file.html - person stack amr; 03.05.2017