2015-10-15 2 views
0

Извините за это, но может сделать это вручную. Реализовать его, вероятно, очень простое решение, но вот мой беспокойный код:Значение необязательного типа 'String?' не разворачивается; вы хотели использовать '!' или '?' Использование Parse In Swift 2.0

@IBAction func loginAction(sender: AnyObject) { 

    var username = self.usernameField.text 
    var password = self.passwordField.text 

    if (count(username.utf16) < 4 || count(password.utf16) < 5) { 

     var alert = UIAlertView(title: "Invalid", message: "Username must be greater then 4 and Password must be greater then 5", delegate: self, cancelButtonTitle: "OK") 
     alert.show() 

    }else { 

     self.actInd.startAnimating() 

     PFUser.logInWithUsernameInBackground(username, password: password, block: { (user, error) -> Void in 

      self.actInd.stopAnimating() 

      if ((user) != nil) { 

       var alert = UIAlertView(title: "Success", message: "Logged In", delegate: self, cancelButtonTitle: "OK") 
       //alert.show() 

       self.navigationController!.popToRootViewControllerAnimated(false) 

      }else { 

       var alert = UIAlertView(title: "Error", message: "\(error)", delegate: self, cancelButtonTitle: "OK") 
       alert.show() 

Photo of Errors: Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'

ответ

1

Сообщение об ошибке в значительной степени самоочевидно, вам необходимо развернуть дополнительные опции. выходы являются опциями, так что и usernameField.text и passwordField.text возвращают тип String? (Тип является необязательной строкой, а не строкой), поэтому вы не можете связать строку, если вы не развернете ее как String. вот как вы можете это сделать

if let username = self.usernameField.text, password = self.passwordField.text { 
    //your code 
} 
+0

Одно исправление tho: Тип _Optional String_, а не необязательный, а не строковый. ;) Это произносится «Необязательно » :) –

+0

Спасибо, я отредактирую это :) Я просто хотел подчеркнуть его не строку – Lukas

+0

:) Fun fact, необязательно на самом деле Enum :) –

0

Цель в Swift дополнительных опций, чтобы уменьшить количество ошибок во время выполнения. Это позволяет коду распознавать, когда переменная не имеет значения. 'no value' отличается от nil и всех других значений.

Когда вы ссылаетесь на необязательный тип, вы можете заставить компилятор получить значение от переменной, добавив! на имя. Это нужно делать только в том случае, если вы абсолютно уверены, что есть ценность для доступа. Если вы это сделаете и значение не определено, ваше приложение будет иметь ошибку времени выполнения (сбой). Опция также может быть проверена с помощью if, чтобы узнать, имеет ли она значение.

Подумайте об этом сообщении об ошибке как о предупреждении о возможной точке отказа.

Смежные вопросы

 Смежные вопросы