2016-06-16 6 views
1

ガードletを使用している間に致命的なエラーが発生しました。ここではエラーがあります:ガードletエラー:条件付きバインディングの初期化子に 'String'以外のオプションが必要です

私が使用している私のコードの下に

Initializer for conditional binding must have Optional type not 'String'

@IBAction func signUpButtonPressed(sender: UIButton) { 
    guard let email = emailTextField.text! where emailTextField.text!.characters.count > 0 else { 
     // alert 
     return 
    } 

    guard let password = passwordTextField.text! where passwordTextField.text!.characters.count > 0 else { 
    // alert 
     return 
    } 

    self.registerUserAsync(email, password: password) 
} 
+0

あなたは強制的にアンラッピングしています。代わりに 'guard let email = emailTextField.text where email.characters.count> 0 else'を使用してください。私。 '!'をドロップしてください。 – Grimxn

答えて

2

あなたがoptionalsと非常に気をつけなければなりません。 !を使用すると、Swiftコンパイラに値が存在することを保証することができます。あなたはバインディング無意味になり、エラーの原因を、オプションをアンラップしているoptionalsについて

@IBAction func signUpButtonPressed(sender: UIButton) { 
    guard let email = emailTextField.text where email.characters.count > 0 else { 
     // alert 
     return 
    } 

    guard let password = passwordTextField.text where password.characters.count > 0 else { 
     // alert 
     return 
    } 

    self.registerUserAsync(email, password: password) 

Swift also introduces optional types, which handle the absence of a value. Optionals say either “there is a value, and it equals x” or “there isn’t a value at all”.

より多くのあなたがここにhttps://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309

0

を見つけることができます:このようにそれを行うようにしてください

emailTextField.text! // see the exclamation mark 

エラーメッセージには、条件付きバインドはオプションでなければならないと言われています(textプロパティはデフォルトでオプションです)。したがって、t彼感嘆符:

emailTextField.text 

より簡単な構文はisEmptyであり、あなたが1つのguardステートメントにコードを減らすことができます。

@IBAction func signUpButtonPressed(sender: UIButton) { 
    guard let email = emailTextField.text where !email.isEmpty, 
      let password = passwordTextField.text where !password.isEmpty else { 
       return 
    } 
    self.registerUserAsync(email, password: password) 
} 
関連する問題