Недавно я перешел на 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)
}
}
}
}
Спасибо за комментарий. Первый имеет смысл. Одна из двух замечаний для второй проблемы заключается в том, что это условный оператор, поэтому вместо 'as!' Необязательный 'as?' Должен использоваться для условного понижения. – cphill
Отредактировано для удаления неправильного предложения –
Отлично. Желаю, чтобы я смог изменить свое использование «на» в моем комментарии :) Еще раз спасибо – cphill