2015-05-05 67 views
1

为什么第二个代码段工作并且第一个不起作用?了解关于解析最新的SDK/Swift 1.2的语法问题

此代码不起作用

func logIn() { 
    PFUser.logInWithUsernameInBackground(tv_username.text, password:tv_password.text) { 
     (user: PFUser!, error: NSError!) -> Void in 
     if user != nil { 
      // Yes, User Exists 
      //self.loginInitialLabel.text = "User Exists" 
     } else { 
      // No, User Doesn't Exist 
     } 
    } 
} 

此代码工作

func logIn() { 
    PFUser.logInWithUsernameInBackground(tv_username.text, password:tv_password.text) { 
     (user, error) -> Void in 
     if user != nil { 
      // Yes, User Exists 
      //self.loginInitialLabel.text = "User Exists" 
     } else { 
      // No, User Doesn't Exist 
     } 
    } 
} 

下面是错误消息。我在寻找一个清晰的解释,为什么一些在线文档有第一个例子,但只有第二个例子有效。 Parse是否在不更改文档的情况下更改其SDK,或者这是Swift 1.2更改的一些工件吗?我正在使用XCode 6.3和Swift 1.2。

enter image description here

错误消息的缩放:

enter image description here

+1

您能提供完整的错误信息吗?它在你的图像中被切断 – TommyBs

+0

这看起来像是SDK的变化。我认为你所看到的是命名返回变量和匿名返回变量之间的区别。 – Chackle

+0

@TommyBs用完整的错误信息更新了问题 – user1406716

回答

1
  • 在第一个例子中,指定的类型分别usererror明确(PFUser!NSError!)。

  • 在第二个示例中,您允许隐式提供usererror的类型。

因此,第一个示例给出编译错误的事实意味着您的显式类型不再正确。它可能是惊叹号;尝试删除它们。

搞清楚它们是什么类型的真正的方法,虽然是使用第二个例子,编译它,然后把光标内user然后里面error并读取类型从快速帮助的权利Xcode的窗口的一面,我在这里做的:

enter image description here

这小把戏已经解决了很多雨燕的奥秘我!