2015-04-23 3 views
2

Недавно я перешел на Swift 1.2 и заметил, что он сломал небольшое количество моих функций Parse. Я все еще пытаюсь оборачивать голову, почему обновление версии нарушило эти изначально работающие методы и как я должен их решить. Две ошибки, которые я вижу, находятся в одной и той же функции .saveInBackgroundWithBlock.Swift 1.2 Parse Save in Background Ошибки

Первая ошибка на моей .saveInBackgroundWithBlock линии:

Function signature '(Bool, NSError!) -> Void' is not compatible with expected type '@objc_block (Bool, NSError!) -> Void'

Второй находится в операторе еще, что произойдет, если есть ошибка регистрация, NSString { error = errorString }

'NSString' is not implicitly convertible to 'String'; did you mean to use 'as' to explicitly convert?

Здесь представляет собой полный код:

import UIKit 

class UserRegistrationViewController: UIViewController { 


    func displayAlert(title:String, error:String) { 

     var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert) 

     alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { 
      action in 



     })) 

     self.presentViewController(alert, animated: true, completion: nil) 


    } 

    @IBOutlet var usernameTextField: UITextField! 

    @IBOutlet var emailTextField: UITextField! 

    @IBOutlet var passwordTextField: UITextField! 


    override func viewDidLoad() { 
     super.viewDidLoad() 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBAction func registerUser(sender: AnyObject) { 

     var error = "" 

     if usernameTextField.text == nil || emailTextField.text == nil || passwordTextField.text == nil { 

      error = "Please enter a username, email and password" 

     } 


     if error != "" { 

      displayAlert("Error In Form", error: error) 

     } else { 

      var user = PFUser.currentUser() 

      user.username = usernameTextField.text 
      user.password = passwordTextField.text 
      user.email = emailTextField.text 

      user.saveInBackgroundWithBlock { 
       (succeeded: Bool!, signupError: NSError!) -> Void in 
       if signupError == nil { 

        println(user.username) 
        println(user.password) 
        println(user.email) 


        self.performSegueWithIdentifier("successfulRegistration", sender: self) 

        /*self.navigationController?.setNavigationBarHidden(self.navigationController?.navigationBarHidden == false, animated: true)*/ 

       } else { 

        if let errorString = signupError.userInfo?["error"] as? NSString { 
         error = errorString 
        } else { 

         error = "Please try again later." 

        } 


        self.displayAlert("Could Not Sign Up", error: error) 

       } 
      } 


     } 


    } 

ответ

2

Для первого, NSError должен быть необязательным, не неявно разворачивал

например:

.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
+0

Спасибо за комментарий. Первый имеет смысл. Одна из двух замечаний для второй проблемы заключается в том, что это условный оператор, поэтому вместо 'as!' Необязательный 'as?' Должен использоваться для условного понижения. – cphill

+0

Отредактировано для удаления неправильного предложения –

+0

Отлично. Желаю, чтобы я смог изменить свое использование «на» в моем комментарии :) Еще раз спасибо – cphill