Swift 1.2中的变化令我感到困惑

时间:2015-04-12 16:05:33

标签: swift objective-c-nullability

我将Xcode更新为6.3,发现我的代码中有一些新的错误,新的Swift 1.2。

user.signUpInBackgroundWithBlock {
    (success:Bool!, error:NSError!) -> Void in

    if !(error != nil) {
        println("sign up successfully")

        var loginAlert: UIAlertController = UIAlertController(title: "Sign Up", message: "Sign Up Succeeded", preferredStyle: UIAlertControllerStyle.Alert)
        self.presentViewController(loginAlert, animated: true, completion: nil)
        loginAlert.addAction(UIAlertAction(title: "Okay", style:

我收到了这个错误:

  

无法使用类型的参数列表调用signUpInBackgroundWithBlock((Bool!,NSError!) - > void)

我该如何解决?

另一个

@IBAction func endend(sender: AnyObject) {        
    if (PFUser.currentUser() == nil) {
        PFUser.logInWithUsernameInBackground(usernameTextField.text, password: passwordTextField.text){  
            (user:PFUser!, error:NSError!) -> Void in

            if user != nil {
                println("login chenggong")
                var tlvc = TimelineViewControllerTableViewController()                
                self.presentViewController(tlvc, animated: true, completion: nil)
            }
            else {
                println("failed")
            }        
        }    
    }
}

我收到了这个错误:

  

“UITextField”没有名为“text”的成员。

我有3个关于}的错误,它说

  

预期“,”分隔符。

     

表达式列表中的预期表达式。

     

预期“)”表达式。

我可以在Swift 1.2之前运行我的应用程序,但现在......

4 个答案:

答案 0 :(得分:1)

以下代码为我工作:

PFUser.logInWithUsernameInBackground(username.text as String!, password: password.text as String!){
                (loggedInuser: PFUser?, signupError: NSError?) -> Void in

答案 1 :(得分:0)

在Xcode中,转到编辑>转换...>到最新的Swift语法...

新版本中有多种语言语法更改,因此Apple提供了一个工具来帮助迁移旧的Swift代码。从我所阅读的内容来看,它非常有用,但并不总能解决100%的问题。希望它至少可以减少您所看到的错误数量。

答案 2 :(得分:0)

对于Parse注册块,当您强制解包布尔成功参数时,Swift 1.2编译器不喜欢它。

删除'!'在'成功之后:Bool'应该删除你得到的错误。

尝试更改:

 user.signUpInBackgroundWithBlock{(success:Bool!, error:NSError!) -> Void in

要:

 user.signUpInBackgroundWithBlock{(success:Bool, error:NSError!) -> Void in

答案 3 :(得分:0)

尝试更改:

 user.signUpInBackgroundWithBlock{(success:Bool!, error:NSError!) -> Void in

要:

 user.signUpInBackgroundWithBlock{(success:Bool?, error:NSError?) -> Void in