2015-05-05 2 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
  • В первом примере, необходимо указать типы user и error в явном виде (PFUser! и NSError!) соответственно.

  • Во втором примере вы допускаете неявный тип user и error.

Таким образом, тот факт, что первый пример дает ошибку компиляции, должен означать, что ваши явные типы больше не верны. Это могут быть восклицательные знаки; попробуйте удалить их.

Реальный способ выяснить, какие типы они представляют собой, заключается в том, чтобы использовать второй пример, скомпилировать его, а затем поместить курсор внутрь user, а затем внутрь error и прочитать типы из Quick Help справа сторона окна Xcode, как я здесь:

enter image description here

Этот маленький трюк решить многие тайны Свифт типа для меня!