2016-07-26 4 views
2

ユーザー入力とストアデータをチェックする関数を作成しようとすると、上記のエラーが発生します。私のプロジェクトは、この関数に到達するまでうまくいく。RegisterButtonTapped()誰もがこのエラーを取り除くことができるいくつかの構造または構文の変更を持っていますか?Xcode 7 + swift。 "宣言の前にローカル変数 '_を使用する"エラー

@IBAction func RegisterButtonTapped(sender: AnyObject) { 

    let userEmail = userEmailTextField.text; 
    let userPassword = userEmailTextField.text; 
    let userRepeatPassword = userRepeatPasswordTextField.text; 


    // Check for empty fields 
    if(userEmail!.isEmpty || userPassword!.isEmpty || userRepeatPassword!.isEmpty){ 

     displayAlertMessage("All fields are required"); 

     return; 
    } 

    // Check if passwords match 
    if(userPassword != userRepeatPassword){ 

     displayAlertMessage("Passwords do not match"); 

     return; 
    } 

    // Store Data 
    NSUserDefaults.standardUserDefaults().setObject(userEmail, forKey: "userEmail"); 
    NSUserDefaults.standardUserDefaults().setObject(userEmail, forKey: "userPassword"); 
    NSUserDefaults.standardUserDefaults().synchronize(); 

    // Display Alert message with confirmation 
    var myAlert = UIAlertController(title:"Alert",message:"Registration is successful, thank you.",preferredStyle: UIAlertControllerStyle.Alert); 

    func displayAlertMessage(userMessage:String){ 

     var myAlert = UIAlertController(title:"Alert",message: userMessage, preferredStyle: UIAlertControllerStyle.Alert); 

     let okAction = UIAlertAction(title:"ok",style: UIAlertActionStyle.Default, handler:nil); 

     myAlert.addAction(okAction); 
     self.presentViewController(myAlert, animated: true, completion: nil); 
    } // END OF FUNCTION 'displayAlertMessage()' 



} // END of FUNCTION 'RegisterButtonTapped()' 
+0

サイドノート - すでにプロジェクトを再構築してXcodeを再起動しようとしました。 –

+0

'RegisterButtonTapped'の中に' displayAlertMessage'を定義しています...関数名にもcaseを使いました。 – triandicAnt

+1

@ triple.s Swiftに入れ子関数があります – Gruntcakes

答えて

0

あなたは)それ以外(RegisterButtonTappedの外に移動し、RegisterButtonTapped()ネストされた関数として、それを維持したい場合の最上部付近にそれの宣言を移動し、それを呼び出した後にあなたがdisplayAlertMessageを宣言しました。

myAlertという変数と、電子メールとパスワードの両方としてuserEmailを保存しています。また、synchronize()は不要です。

0

正しく動作させるにはいくつかの詳細があります。 displayAlertMessageは、呼び出し後にレジスタ関数内で宣言され、警告を受け取るようになっています。成功すると成功のメッセージで関数を呼び出し、var myAlertは警告関数のように宣言してはいけません。そして最終的な詳細:UITextFields値を取得すると、電子メール入力フィールドが得られ、パスワード値に設定されるため、検証は間違っています。ここで

素晴らしい作品コードのサンプル:

class ViewController: UIViewController { 

    @IBOutlet var userEmailTextField:UITextField! 
    @IBOutlet var userPassTextField:UITextField! 
    @IBOutlet var userRepeatPasswordTextField:UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func RegisterButtonTapped(sender:UIButton) { 
     let userEmail = userEmailTextField.text; 
     let userPassword = userPassTextField.text; 
     let userRepeatPassword = userRepeatPasswordTextField.text; 


     // Check for empty fields 
     if(userEmail!.isEmpty || userPassword!.isEmpty || userRepeatPassword!.isEmpty){ 

      displayAlertMessage("All fields are required"); 

      return; 
     } 

     // Check if passwords match 
     if(userPassword != userRepeatPassword){ 

      displayAlertMessage("Passwords do not match"); 

      return; 
     } 

     // Store Data 
     NSUserDefaults.standardUserDefaults().setObject(userEmail, forKey: "userEmail"); 
     NSUserDefaults.standardUserDefaults().setObject(userEmail, forKey: "userPassword"); 
     NSUserDefaults.standardUserDefaults().synchronize(); 

     displayAlertMessage("Registration is successful, thank you.") 
    } 

    // Display Alert message with confirmation 
    func displayAlertMessage(userMessage:String){ 

     let myAlert = UIAlertController(title:"Alert",message: userMessage, preferredStyle: UIAlertControllerStyle.Alert); 

     let okAction = UIAlertAction(title:"ok",style: UIAlertActionStyle.Default, handler:nil); 

     myAlert.addAction(okAction); 
     self.presentViewController(myAlert, animated: true, completion: nil); 
    } 

} 
+0

"displayAlertMessageはレジスタ関数内で宣言されており、警告を受け取ります"。そうでない場合、入れ子関数はSwiftで許可されます。 – Gruntcakes

+0

宣言が呼び出しの後であったことを忘れてしまった。変更を加えました。 –

+0

あなたの改善は完璧に機能しました。コードは期待どおりに実行されています。 –

0

あなたは、ネストされた機能を持っている場合は、あなたがそれを呼び出すことができます前にそれを宣言する必要があります。この場合、 "//空のフィールドをチェックする"コメントの上にある "displayAlertMessage(userMessage:String)"関数を移動し、コンパイルする必要があります。

関連する問題