2017-07-01 4 views
1

私はガードステートメントを実装しようとしていましたが、ゼロ値を渡してもガードステートメントを過ぎてコードが実行される以外は実装が正しいと思います。私は基本的にフィールドを空のままにして、このコードを実行するために登録ボタンを押すが、電子メールとパスワードに空の値を割り当て、コードは "else"ブロックの直後に実行される。助けていただければ幸いです。ガード・ステートメントがnil値で処理されないことを確認するにはどうすればよいですか?

guard let email = emailField.text, let password = passwordField.text, let name = nameField.text else { 
     print ("FYF: Form is not valid") 
     return 
    } 

    Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in 
     if error != nil { 
      print(error!) 
      return 
     } 

私はガードステートメントでブレークポイントを使用し、それを乗り越えました。変数インスペクターをチェックすると、電子メールとパスワードのフィールドはゼロであると言います。私は何かが間違っていたかもしれないと思う。ありがとうございました!

+0

あなたは 'UITextField'変数をどのように宣言しましたか? –

+0

@TristanBeaton私はUILabel'sを使用していません。ただUITextFieldsです。そして、私は以前のものを宣言しました。 –

答えて

3

あなたのコードは正しいですし、恐らく決してguard節に入ることはありません。ここでは、変数の値をUITextフィールドに基づいて設定しています。このフィールドは、空でない場合はnullです。空の文字列はnull値と同じではないことを理解することが重要です。 ""で表される空の文字列は、依然として文字列です。ヌル値はJavaScriptコーダーのようにtalk:は未定義の型です。ガード句は、非nilプロパティをnil値に設定しようとしたときにのみ失敗します。テキストが入力されない場合、デフォルトでは空の文字列""

guard emailField.text.isEmpty == false, passwordField.text.isEmpty == false 

それとも

guard !emailField.text.isEmpty, !passwordField.text.isEmpty 
+0

iOS 10以降をコーディングする際にも、UITextFieldは、hasTextという名前のインスタンスプロパティを持つUIKeyInputから継承するUITextInputに準拠しています。https://developer.apple.com/documentation/uikit/uikeyinput/1614457-hastext。 'guard emailField.hasText、passwordField.hasText else' –

0

UITextfieldリターン:

は、この問題を解決するには、あなただけのようなものにあなたのガード句を変更します。だからあなたのガード・ステートメントは常に真実です。

UITextfieldがnilではなく空でないかどうかを確認します。

guard let email = (emailField.text?.isEmpty == false ? tfTest1.text : nil) else { 
     print ("FYF: Form is not valid") 
     return 
    } 

希望します。

+0

@GustavoTavaresの答えは既にこれをカバーしています。 –

+0

はい、私は今それを見ました。私はそれを行うための別の例のコードを追加しました、あなたはどちらかを使用することができます。ありがとう! –

関連する問題